00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00016 #ifndef _LOG4CPLUS_SPI_INTERNAL_LOGGING_EVENT_HEADER_
00017 #define _LOG4CPLUS_SPI_INTERNAL_LOGGING_EVENT_HEADER_
00018
00019 #include <log4cplus/config.h>
00020 #include <log4cplus/loglevel.h>
00021 #include <log4cplus/ndc.h>
00022 #include <log4cplus/tstring.h>
00023 #include <log4cplus/helpers/timehelper.h>
00024 #include <log4cplus/helpers/threads.h>
00025
00026 namespace log4cplus {
00027 namespace spi {
00036 class LOG4CPLUS_EXPORT InternalLoggingEvent {
00037 public:
00038
00046 InternalLoggingEvent(const log4cplus::tstring& logger,
00047 LogLevel ll,
00048 const log4cplus::tstring& message,
00049 const char* filename,
00050 int line)
00051 : message(message),
00052 loggerName(logger),
00053 ll(ll),
00054 ndc(),
00055 thread(),
00056 timestamp(log4cplus::helpers::Time::gettimeofday()),
00057 file( ( filename
00058 ? LOG4CPLUS_C_STR_TO_TSTRING(filename)
00059 : log4cplus::tstring()) ),
00060 line(line),
00061 threadCached(false),
00062 ndcCached(false)
00063 {
00064 }
00065
00066 InternalLoggingEvent(const log4cplus::tstring& logger,
00067 LogLevel ll,
00068 const log4cplus::tstring& ndc,
00069 const log4cplus::tstring& message,
00070 const log4cplus::tstring& thread,
00071 log4cplus::helpers::Time time,
00072 const log4cplus::tstring& file,
00073 int line)
00074 : message(message),
00075 loggerName(logger),
00076 ll(ll),
00077 ndc(ndc),
00078 thread(thread),
00079 timestamp(time),
00080 file(file),
00081 line(line),
00082 threadCached(true),
00083 ndcCached(true)
00084 {
00085 }
00086
00087 InternalLoggingEvent(const log4cplus::spi::InternalLoggingEvent& rhs)
00088 : message(rhs.getMessage()),
00089 loggerName(rhs.getLoggerName()),
00090 ll(rhs.getLogLevel()),
00091 ndc(rhs.getNDC()),
00092 thread(rhs.getThread()),
00093 timestamp(rhs.getTimestamp()),
00094 file(rhs.getFile()),
00095 line(rhs.getLine()),
00096 threadCached(true),
00097 ndcCached(true)
00098 {
00099 }
00100
00101 virtual ~InternalLoggingEvent();
00102
00103
00104
00106 virtual const log4cplus::tstring& getMessage() const;
00107
00112 virtual unsigned int getType() const;
00113
00117 virtual std::auto_ptr<InternalLoggingEvent> clone() const;
00118
00119
00120
00121
00125 const log4cplus::tstring& getLoggerName() const { return loggerName; }
00126
00128 LogLevel getLogLevel() const { return ll; }
00129
00131 const log4cplus::tstring& getNDC() const {
00132 if(!ndcCached) {
00133 ndc = log4cplus::getNDC().get();
00134 ndcCached = true;
00135 }
00136 return ndc;
00137 }
00138
00140 const log4cplus::tstring& getThread() const {
00141 if(!threadCached) {
00142 thread = LOG4CPLUS_GET_CURRENT_THREAD_NAME;
00143 threadCached = true;
00144 }
00145 return thread;
00146 }
00147
00150 const log4cplus::helpers::Time& getTimestamp() const { return timestamp; }
00151
00153 const log4cplus::tstring& getFile() const { return file; }
00154
00156 int getLine() const { return line; }
00157
00158
00159 log4cplus::spi::InternalLoggingEvent&
00160 operator=(const log4cplus::spi::InternalLoggingEvent& rhs);
00161
00162
00163 static unsigned int getDefaultType();
00164
00165 protected:
00166
00167 log4cplus::tstring message;
00168
00169 private:
00170 log4cplus::tstring loggerName;
00171 LogLevel ll;
00172 mutable log4cplus::tstring ndc;
00173 mutable log4cplus::tstring thread;
00174 log4cplus::helpers::Time timestamp;
00175 log4cplus::tstring file;
00176 int line;
00178 mutable bool threadCached;
00180 mutable bool ndcCached;
00181 };
00182
00183 }
00184 }
00185
00186 #endif // _LOG4CPLUS_SPI_INTERNAL_LOGGING_EVENT_HEADER_
00187