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_
							 | 
						|
								
							 | 
						|
								
							 |