00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00017 #ifndef _LOG4CPLUS_LOGGERHEADER_
00018 #define _LOG4CPLUS_LOGGERHEADER_
00019
00020 #include <log4cplus/config.h>
00021 #include <log4cplus/loglevel.h>
00022 #include <log4cplus/loggingmacros.h>
00023 #include <log4cplus/tstring.h>
00024 #include <log4cplus/streams.h>
00025 #include <log4cplus/helpers/pointer.h>
00026 #include <log4cplus/spi/appenderattachable.h>
00027 #include <log4cplus/spi/loggerfactory.h>
00028
00029 #include <memory>
00030 #include <vector>
00031
00032 namespace log4cplus {
00033
00034 namespace spi {
00035 class LoggerImpl;
00036 typedef helpers::SharedObjectPtr<LoggerImpl> SharedLoggerImplPtr;
00037 }
00038 class Appender;
00039 class Hierarchy;
00040 class HierarchyLocker;
00041 class DefaultLoggerFactory;
00042
00043
00046 typedef std::vector<Logger> LoggerList;
00047
00048
00057 class LOG4CPLUS_EXPORT Logger : public log4cplus::spi::AppenderAttachable {
00058 public:
00059
00066 static bool exists(const log4cplus::tstring& name);
00067
00068
00069
00070
00071
00072
00073
00074
00075 static LoggerList getCurrentLoggers();
00076
00080 static Hierarchy& getDefaultHierarchy();
00081
00093 static Logger getInstance(const log4cplus::tstring& name);
00094
00107 static Logger getInstance(const log4cplus::tstring& name, spi::LoggerFactory& factory);
00108
00119 static Logger getRoot();
00120
00135 static void shutdown();
00136
00137
00147 void assertion(bool assertionVal, const log4cplus::tstring& msg) {
00148 if(!assertionVal) {
00149 log(FATAL_LOG_LEVEL, msg);
00150 }
00151 }
00152
00157 void closeNestedAppenders();
00158
00165 bool isEnabledFor(LogLevel ll) const;
00166
00170 void log(LogLevel ll, const log4cplus::tstring& message,
00171 const char* file=NULL, int line=-1);
00172
00177 void forcedLog(LogLevel ll, const log4cplus::tstring& message,
00178 const char* file=NULL, int line=-1);
00179
00191 void callAppenders(const spi::InternalLoggingEvent& event);
00192
00201 LogLevel getChainedLogLevel() const;
00202
00208 LogLevel getLogLevel() const;
00209
00213 void setLogLevel(LogLevel);
00214
00219 Hierarchy& getHierarchy() const;
00220
00224 log4cplus::tstring getName() const;
00225
00229 bool getAdditivity() const;
00230
00234 void setAdditivity(bool additive);
00235
00236
00237
00238 virtual void addAppender(SharedAppenderPtr newAppender);
00239
00240 virtual SharedAppenderPtrList getAllAppenders();
00241
00242 virtual SharedAppenderPtr getAppender(const log4cplus::tstring& name);
00243
00244 virtual void removeAllAppenders();
00245
00246 virtual void removeAppender(SharedAppenderPtr appender);
00247
00248 virtual void removeAppender(const log4cplus::tstring& name);
00249
00250
00251 Logger(const Logger& rhs);
00252 Logger& operator=(const Logger& rhs);
00253
00254
00255 ~Logger();
00256
00261 Logger getParent();
00262
00263 protected:
00264
00266 spi::LoggerImpl *value;
00267
00268 private:
00269
00279 Logger(spi::LoggerImpl *ptr);
00280 Logger(const spi::SharedLoggerImplPtr& val);
00281
00282
00283 void init();
00284 void validate(const char *file, int line) const;
00285
00286
00287 friend class log4cplus::spi::LoggerImpl;
00288 friend class log4cplus::Hierarchy;
00289 friend class log4cplus::HierarchyLocker;
00290 friend class log4cplus::DefaultLoggerFactory;
00291 };
00292
00293
00298 class LOG4CPLUS_EXPORT DefaultLoggerFactory : public spi::LoggerFactory {
00299 public:
00300 Logger makeNewLoggerInstance(const log4cplus::tstring& name, Hierarchy& h);
00301 };
00302
00303
00304
00315 class LOG4CPLUS_EXPORT TraceLogger {
00316 public:
00317 TraceLogger(const Logger& l, const log4cplus::tstring& _msg,
00318 const char* _file=NULL, int _line=-1)
00319 : logger(l), msg(_msg), file(_file), line(_line)
00320 { if(logger.isEnabledFor(TRACE_LOG_LEVEL))
00321 logger.forcedLog(TRACE_LOG_LEVEL, LOG4CPLUS_TEXT("ENTER: ") + msg, file, line);
00322 }
00323
00324 ~TraceLogger()
00325 { if(logger.isEnabledFor(TRACE_LOG_LEVEL))
00326 logger.forcedLog(TRACE_LOG_LEVEL, LOG4CPLUS_TEXT("EXIT: ") + msg, file, line);
00327 }
00328
00329 private:
00330 Logger logger;
00331 log4cplus::tstring msg;
00332 const char* file;
00333 int line;
00334 };
00335
00336 }
00337
00338
00339 #endif // _LOG4CPLUS_LOGGERHEADER_
00340