blob: 896e0bcf77de62ae0d616d9e80d498e9f25bf691 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <log4cxx/logger.h>
#include "../xml/xlevel.h"
#include <log4cxx/spi/loggerfactory.h>
namespace log4cxx
{
namespace spi
{
namespace location
{
class LocationInfo;
}
}
// Any sub-class of Logger must also have its own implementation of
// LoggerFactory.
class XFactory :
public virtual spi::LoggerFactory,
public virtual helpers::ObjectImpl
{
public:
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XFactory)
BEGIN_LOG4CXX_CAST_MAP()
LOG4CXX_CAST_ENTRY(XFactory)
LOG4CXX_CAST_ENTRY(spi::LoggerFactory)
END_LOG4CXX_CAST_MAP()
XFactory();
virtual LoggerPtr makeNewLoggerInstance(
log4cxx::helpers::Pool& pool,
const LogString& name) const;
};
typedef helpers::ObjectPtrT<XFactory> XFactoryPtr;
/**
A simple example showing Logger sub-classing. It shows the
minimum steps necessary to implement one's {@link LoggerFactory}.
Note that sub-classes follow the hierarchy even if its loggers
belong to different classes.
*/
class XLogger : public Logger
{
// It's enough to instantiate a factory once and for all.
static XFactoryPtr factory;
LogString suffix;
public:
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XLogger)
BEGIN_LOG4CXX_CAST_MAP()
LOG4CXX_CAST_ENTRY(XLogger)
LOG4CXX_CAST_ENTRY_CHAIN(Logger)
END_LOG4CXX_CAST_MAP()
/**
Just calls the parent constuctor.
*/
XLogger(log4cxx::helpers::Pool& pool,
const LogString& name1) : Logger(pool, name1) {}
/**
Nothing to activate.
*/
void activateOptions() {}
/**
We introduce a new printing method in order to support {@link
XLevel#LETHAL}. */
void lethal(const LogString& message, const log4cxx::spi::LocationInfo& location);
/**
We introduce a new printing method in order to support {@link
XLevel#LETHAL}. */
void lethal(const LogString& message);
static LoggerPtr getLogger(const LogString& name);
static LoggerPtr getLogger(const helpers::Class& clazz);
LogString getSuffix() const
{
return suffix;
}
void setSuffix(const LogString& suffix1)
{
this->suffix = suffix1;
}
/**
We introduce a new printing method that takes the TRACE level.
*/
void trace(const LogString& message, const log4cxx::spi::LocationInfo& location);
/**
We introduce a new printing method that takes the TRACE level.
*/
void trace(const LogString& message);
};
typedef helpers::ObjectPtrT<XLogger> XLoggerPtr;
}