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.
		
		
		
		
		
			
		
			
				
					
					
						
							228 lines
						
					
					
						
							7.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							228 lines
						
					
					
						
							7.6 KiB
						
					
					
				| // -*- C++ -*- | |
| // Module:  Log4CPLUS | |
| // File:    loggingevent.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_INTERNAL_LOGGING_EVENT_HEADER_ | |
| #define LOG4CPLUS_SPI_INTERNAL_LOGGING_EVENT_HEADER_ | |
|  | |
| #include <log4cplus/config.hxx> | |
|  | |
| #if defined (LOG4CPLUS_HAVE_PRAGMA_ONCE) | |
| #pragma once | |
| #endif | |
|  | |
| #include <memory> | |
| #include <log4cplus/loglevel.h> | |
| #include <log4cplus/ndc.h> | |
| #include <log4cplus/mdc.h> | |
| #include <log4cplus/tstring.h> | |
| #include <log4cplus/helpers/timehelper.h> | |
| #include <log4cplus/thread/threads.h> | |
|  | |
| namespace log4cplus { | |
|     namespace spi { | |
|         /** | |
|          * The internal representation of logging events. When an affirmative | |
|          * decision is made to log then a <code>InternalLoggingEvent</code> | |
|          * instance is created. This instance is passed around to the | |
|          * different log4cplus components. | |
|          * | |
|          * This class is of concern to those wishing to extend log4cplus. | |
|          */ | |
|         class LOG4CPLUS_EXPORT InternalLoggingEvent { | |
|         public: | |
|           // Ctors | |
|              /** | |
|               * Instantiate a LoggingEvent from the supplied parameters. | |
|               * | |
|               * @param logger   The logger of this event. | |
|               * @param loglevel The LogLevel of this event. | |
|               * @param message  The message of this event. | |
|               * @param filename Name of file where this event has occurred, | |
|               * can be NULL. | |
|               * @param line     Line number in file specified by | |
|               *                 the <code>filename</code> parameter. | |
|               */ | |
|             InternalLoggingEvent(const log4cplus::tstring& logger, | |
|                 LogLevel loglevel, const log4cplus::tstring& message, | |
|                 const char* filename, int line); | |
| 
 | |
|             InternalLoggingEvent(const log4cplus::tstring& logger, | |
|                 LogLevel loglevel, const log4cplus::tstring& ndc, | |
|                 MappedDiagnosticContextMap const & mdc, | |
|                 const log4cplus::tstring& message, | |
|                 const log4cplus::tstring& thread, | |
|                 log4cplus::helpers::Time time, const log4cplus::tstring& file, | |
|                 int line); | |
| 
 | |
|             InternalLoggingEvent (); | |
| 
 | |
|             InternalLoggingEvent( | |
|                 const log4cplus::spi::InternalLoggingEvent& rhs); | |
| 
 | |
|             virtual ~InternalLoggingEvent(); | |
| 
 | |
|             void setLoggingEvent (const log4cplus::tstring & logger, | |
|                 LogLevel ll, const log4cplus::tstring & message, | |
|                 const char * filename, int line); | |
| 
 | |
|             void setFunction (char const * func); | |
|             void setFunction (log4cplus::tstring const &); | |
| 
 | |
| 
 | |
|           // public virtual methods | |
|             /** The application supplied message of logging event. */ | |
|             virtual const log4cplus::tstring& getMessage() const; | |
| 
 | |
|             /** Returns the 'type' of InternalLoggingEvent.  Derived classes | |
|              *  should override this method.  (NOTE: Values <= 1000 are | |
|              *  reserved for log4cplus and should not be used.) | |
|              */ | |
|             virtual unsigned int getType() const; | |
| 
 | |
|            /** Returns a copy of this object.  Derived classes | |
|              *  should override this method. | |
|              */ | |
|             virtual std::auto_ptr<InternalLoggingEvent> clone() const; | |
| 
 | |
| 
 | |
| 
 | |
|           // public methods | |
|             /** The logger of the logging event. It is set by | |
|              *  the LoggingEvent constructor. | |
|              */ | |
|             const log4cplus::tstring& getLoggerName() const | |
|             { | |
|                 return loggerName; | |
|             } | |
| 
 | |
|             /** LogLevel of logging event. */ | |
|             LogLevel getLogLevel() const | |
|             { | |
|                 return ll; | |
|             } | |
| 
 | |
|             /** The nested diagnostic context (NDC) of logging event. */ | |
|             const log4cplus::tstring& getNDC() const | |
|             { | |
|                 if (!ndcCached) | |
|                 { | |
|                     ndc = log4cplus::getNDC().get(); | |
|                     ndcCached = true; | |
|                 } | |
|                 return ndc; | |
|             } | |
| 
 | |
|             MappedDiagnosticContextMap const & getMDCCopy () const | |
|             { | |
|                 if (!mdcCached) | |
|                 { | |
|                     mdc = log4cplus::getMDC().getContext (); | |
|                     mdcCached = true; | |
|                 } | |
|                 return mdc; | |
|             } | |
| 
 | |
|             tstring const & getMDC (tstring const & key) const; | |
| 
 | |
|             /** The name of thread in which this logging event was generated. */ | |
|             const log4cplus::tstring& getThread() const | |
|             { | |
|                 if (! threadCached) | |
|                 { | |
|                     thread = thread::getCurrentThreadName (); | |
|                     threadCached = true; | |
|                 } | |
|                 return thread; | |
|             } | |
| 
 | |
|             //! The alternative name of thread in which this logging event | |
|             //! was generated. | |
|             const log4cplus::tstring& getThread2() const | |
|             { | |
|                 if (! thread2Cached) | |
|                 { | |
|                     thread2 = thread::getCurrentThreadName2 (); | |
|                     thread2Cached = true; | |
|                 } | |
|                 return thread2; | |
|             } | |
| 
 | |
| 
 | |
|             /** The number of milliseconds elapsed from 1/1/1970 until | |
|              *  logging event was created. */ | |
|             const log4cplus::helpers::Time& getTimestamp() const | |
|             { | |
|                 return timestamp; | |
|             } | |
| 
 | |
|             /** The is the file where this log statement was written */ | |
|             const log4cplus::tstring& getFile() const | |
|             { | |
|                 return file; | |
|             } | |
| 
 | |
|             /** The is the line where this log statement was written */ | |
|             int getLine() const { return line; } | |
| 
 | |
|             log4cplus::tstring const & getFunction () const | |
|             { | |
|                 return function; | |
|             } | |
| 
 | |
|             void gatherThreadSpecificData () const; | |
| 
 | |
|             void swap (InternalLoggingEvent &); | |
| 
 | |
|           // public operators | |
|             log4cplus::spi::InternalLoggingEvent& | |
|             operator=(const log4cplus::spi::InternalLoggingEvent& rhs); | |
| 
 | |
|           // static methods | |
|             static unsigned int getDefaultType(); | |
| 
 | |
|         protected: | |
|           // Data | |
|             log4cplus::tstring message; | |
|             log4cplus::tstring loggerName; | |
|             LogLevel ll; | |
|             mutable log4cplus::tstring ndc; | |
|             mutable MappedDiagnosticContextMap mdc; | |
|             mutable log4cplus::tstring thread; | |
|             mutable log4cplus::tstring thread2; | |
|             log4cplus::helpers::Time timestamp; | |
|             log4cplus::tstring file; | |
|             log4cplus::tstring function; | |
|             int line; | |
|             /** Indicates whether or not the Threadname has been retrieved. */ | |
|             mutable bool threadCached; | |
|             mutable bool thread2Cached; | |
|             /** Indicates whether or not the NDC has been retrieved. */ | |
|             mutable bool ndcCached; | |
|             /** Indicates whether or not the MDC has been retrieved. */ | |
|             mutable bool mdcCached; | |
|         }; | |
| 
 | |
|     } // end namespace spi | |
| } // end namespace log4cplus | |
|  | |
| #endif // LOG4CPLUS_SPI_INTERNAL_LOGGING_EVENT_HEADER_
 |