You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
7.1 KiB
219 lines
7.1 KiB
// -*- C++ -*-
|
|
// Module: Log4CPLUS
|
|
// File: loggerimpl.h
|
|
// Created: 6/2001
|
|
// Author: Tad E. Smith
|
|
//
|
|
//
|
|
// Copyright 2001-2010 Tad E. Smith
|
|
//
|
|
// Licensed 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.
|
|
|
|
/** @file */
|
|
|
|
#ifndef LOG4CPLUS_SPI_LOGGER_HEADER_
|
|
#define LOG4CPLUS_SPI_LOGGER_HEADER_
|
|
|
|
#include <log4cplus/config.hxx>
|
|
|
|
#if defined (LOG4CPLUS_HAVE_PRAGMA_ONCE)
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <log4cplus/tstring.h>
|
|
#include <log4cplus/helpers/appenderattachableimpl.h>
|
|
#include <log4cplus/helpers/pointer.h>
|
|
#include <log4cplus/spi/loggerfactory.h>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
|
|
namespace log4cplus {
|
|
class DefaultLoggerFactory;
|
|
|
|
namespace spi {
|
|
|
|
/**
|
|
* This is the central class in the log4cplus package. One of the
|
|
* distintive features of log4cplus are hierarchical loggers and their
|
|
* evaluation.
|
|
*
|
|
* See the <a href="../../../../manual.html">user manual</a> for an
|
|
* introduction on this class.
|
|
*/
|
|
class LOG4CPLUS_EXPORT LoggerImpl
|
|
: public virtual log4cplus::helpers::SharedObject,
|
|
public log4cplus::helpers::AppenderAttachableImpl
|
|
{
|
|
public:
|
|
typedef helpers::SharedObjectPtr<LoggerImpl> SharedLoggerImplPtr;
|
|
|
|
// Methods
|
|
|
|
/**
|
|
* Call the appenders in the hierrachy starting at
|
|
* <code>this</code>. If no appenders could be found, emit a
|
|
* warning.
|
|
*
|
|
* This method calls all the appenders inherited from the
|
|
* hierarchy circumventing any evaluation of whether to log or not
|
|
* to log the particular log request.
|
|
*
|
|
* @param event The event to log.
|
|
*/
|
|
virtual void callAppenders(const InternalLoggingEvent& event);
|
|
|
|
/**
|
|
* Close all attached appenders implementing the AppenderAttachable
|
|
* interface.
|
|
*/
|
|
virtual void closeNestedAppenders();
|
|
|
|
/**
|
|
* Check whether this logger is enabled for a given LogLevel passed
|
|
* as parameter.
|
|
*
|
|
* @return boolean True if this logger is enabled for <code>ll</code>.
|
|
*/
|
|
virtual bool isEnabledFor(LogLevel ll) const;
|
|
|
|
/**
|
|
* This generic form is intended to be used by wrappers.
|
|
*/
|
|
virtual void log(LogLevel ll, const log4cplus::tstring& message,
|
|
const char* file=NULL, int line=-1);
|
|
|
|
virtual void log(spi::InternalLoggingEvent const &);
|
|
|
|
/**
|
|
* Starting from this logger, search the logger hierarchy for a
|
|
* "set" LogLevel and return it. Otherwise, return the LogLevel of the
|
|
* root logger.
|
|
*
|
|
* The Logger class is designed so that this method executes as
|
|
* quickly as possible.
|
|
*/
|
|
virtual LogLevel getChainedLogLevel() const;
|
|
|
|
/**
|
|
* Returns the assigned LogLevel, if any, for this Logger.
|
|
*
|
|
* @return LogLevel - the assigned LogLevel.
|
|
*/
|
|
LogLevel getLogLevel() const { return this->ll; }
|
|
|
|
/**
|
|
* Set the LogLevel of this Logger.
|
|
*/
|
|
void setLogLevel(LogLevel _ll) { this->ll = _ll; }
|
|
|
|
/**
|
|
* Return the the {@link Hierarchy} where this <code>Logger</code>
|
|
* instance is attached.
|
|
*/
|
|
virtual Hierarchy& getHierarchy() const;
|
|
|
|
/**
|
|
* Return the logger name.
|
|
*/
|
|
log4cplus::tstring const & getName() const { return name; }
|
|
|
|
/**
|
|
* Get the additivity flag for this Logger instance.
|
|
*/
|
|
bool getAdditivity() const;
|
|
|
|
/**
|
|
* Set the additivity flag for this Logger instance.
|
|
*/
|
|
void setAdditivity(bool additive);
|
|
|
|
virtual ~LoggerImpl();
|
|
|
|
protected:
|
|
// Ctors
|
|
/**
|
|
* This constructor created a new <code>Logger</code> instance and
|
|
* sets its name.
|
|
*
|
|
* It is intended to be used by sub-classes only. You should not
|
|
* create loggers directly.
|
|
*
|
|
* @param name The name of the logger.
|
|
* @param h Hierarchy
|
|
*/
|
|
LoggerImpl(const log4cplus::tstring& name, Hierarchy& h);
|
|
|
|
|
|
// Methods
|
|
/**
|
|
* This method creates a new logging event and logs the event
|
|
* without further checks.
|
|
*/
|
|
virtual void forcedLog(LogLevel ll,
|
|
const log4cplus::tstring& message,
|
|
const char* file=NULL,
|
|
int line=-1);
|
|
|
|
virtual void forcedLog(spi::InternalLoggingEvent const & ev);
|
|
|
|
|
|
// Data
|
|
/** The name of this logger */
|
|
log4cplus::tstring name;
|
|
|
|
/**
|
|
* The assigned LogLevel of this logger.
|
|
*/
|
|
LogLevel ll;
|
|
|
|
/**
|
|
* The parent of this logger. All loggers have at least one
|
|
* ancestor which is the root logger.
|
|
*/
|
|
SharedLoggerImplPtr parent;
|
|
|
|
/**
|
|
* Additivity is set to true by default, that is children inherit
|
|
* the appenders of their ancestors by default. If this variable is
|
|
* set to <code>false</code> then the appenders found in the
|
|
* ancestors of this logger are not used. However, the children
|
|
* of this logger will inherit its appenders, unless the children
|
|
* have their additivity flag set to <code>false</code> too. See
|
|
* the user manual for more details.
|
|
*/
|
|
bool additive;
|
|
|
|
private:
|
|
// Data
|
|
/** Loggers need to know what Hierarchy they are in. */
|
|
Hierarchy& hierarchy;
|
|
|
|
// Disallow copying of instances of this class
|
|
LoggerImpl(const LoggerImpl&);
|
|
LoggerImpl& operator=(const LoggerImpl&);
|
|
|
|
// Friends
|
|
friend class log4cplus::Logger;
|
|
friend class log4cplus::DefaultLoggerFactory;
|
|
friend class log4cplus::Hierarchy;
|
|
};
|
|
|
|
typedef LoggerImpl::SharedLoggerImplPtr SharedLoggerImplPtr;
|
|
|
|
} // end namespace spi
|
|
} // end namespace log4cplus
|
|
|
|
#endif // LOG4CPLUS_SPI_LOGGER_HEADER_
|
|
|
|
|