Go to the documentation of this file.00001 #ifndef logging_logger_H
00002 #define logging_logger_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00032 #ifndef __cplusplus
00033 #error This is a C++ include file and cannot be used from plain C
00034 #endif
00035
00036 #include <string>
00037 #include <lokiSmartPtr.h>
00038 #include <list>
00039 #include "loggingBaseLog.h"
00040 #include "loggingHandler.h"
00041 #include <ace/Thread_Mutex.h>
00042 #include <Singleton.h>
00043 #include <Thread_Manager.h>
00044
00045 namespace Logging
00046 {
00047
00048
00055 class Logger : public virtual BaseLog
00056 {
00057 public:
00058
00060 #ifndef MAKE_VXWORKS
00061 typedef Loki::SmartPtr<Logger,
00062 Loki::RefCountedMTAdj<Loki::ObjectLevelLockable>::RefCountedMT,
00063 Loki::AllowConversion,
00064 Loki::NoCheck,
00065 Loki::DefaultSPStorage> LoggerSmartPtr;
00066 #else
00067 typedef Loki::SmartPtr<Logger,
00068 RefCountedMT,
00069 Loki::AllowConversion,
00070 Loki::NoCheck,
00071 Loki::DefaultSPStorage> LoggerSmartPtr;
00072 #endif
00073
00074
00075 typedef std::list<Logger*> LoggerList;
00076
00077
00078 typedef void (*ConfigureLoggerFunction)(const std::string& loggerName);
00079
00086 virtual LoggerSmartPtr
00087 getLogger(const std::string &loggerName) = 0;
00088
00089 int getLocalLevel();
00090 int getRemoteLevel();
00091 int
00092 getLocalLevel(const std::string &loggerName);
00093 int
00094 getRemoteLevel(const std::string &loggerName);
00099 static LoggerSmartPtr getAnonymousLogger();
00100
00106 static void setAnonymousLogger(LoggerSmartPtr anonyLogger);
00107
00113 static LoggerSmartPtr getStaticLogger();
00114
00120 static void setStaticLogger(LoggerSmartPtr anonyLogger);
00121
00127 static LoggerSmartPtr getGlobalLogger();
00128
00134 static void setGlobalLogger(LoggerSmartPtr globalLogger);
00135
00141 virtual std::string getName() const;
00142
00146 virtual ~Logger();
00147
00156 virtual void
00157 addHandler(Handler::HandlerSmartPtr newHandler_p);
00158
00165 virtual bool
00166 removeHandler(const std::string &handlerName);
00167
00169 virtual void
00170 log(const LogRecord &lr);
00171
00175 virtual void
00176 log(Priority priority,
00177 const std::string &message,
00178 const std::string &file,
00179 unsigned long line,
00180 const std::string &method)
00181 {
00182 BaseLog::log(priority, message, file, line, method);
00183 }
00184
00193 virtual void
00194 log(Priority priority,
00195 const std::string &message)
00196 {
00197 log(priority,
00198 message,
00199 FIELD_UNAVAILABLE,
00200 0UL,
00201 FIELD_UNAVAILABLE);
00202 }
00203
00209 virtual void
00210 setName(const std::string &newName);
00211
00217 virtual void
00218 setLevels(Priority remotePriority,Priority localPriority, int type);
00219
00226 virtual void
00227 setLevels(const std::string &loggerName, Priority remotePriority,Priority localPriority, int type);
00228
00229 void setLevelsLoggerHandlers(Priority remotePriority,Priority localPriority, int type);
00235 virtual bool
00236 exists(const std::string &loggerName);
00237
00242 virtual std::list<std::string>
00243 getLoggerNames();
00244
00248 static void
00249 setConfigureLoggerFunction(ConfigureLoggerFunction configureLoggerFunction) {configureLoggerFunction_m=configureLoggerFunction;}
00250
00254 static void
00255 configureLogger(const std::string& loggerName)
00256 {
00257 if (configureLoggerFunction_m)
00258 (*configureLoggerFunction_m)(loggerName);
00259 }
00260
00261 protected:
00262
00269 Logger(const std::string &loggerName);
00270
00278 virtual void
00279 acquireHandlerMutex() {}
00280
00288 virtual void
00289 releaseHandlerMutex() {}
00290
00291 private:
00292
00294 std::string loggerName_m;
00295
00300 std::list<Handler::HandlerSmartPtr> handlers_m;
00301
00302 class Logger_ptr{
00303 public:
00304 Logger_ptr(){globalLogger_m=(Logger *)0;anonymousLogger_m=(Logger *)0;staticLogger_m=(Logger *)0;}
00305 ~Logger_ptr(){globalLogger_m=(Logger *)0;anonymousLogger_m=(Logger *)0;staticLogger_m=(Logger *)0;}
00310 LoggerSmartPtr globalLogger_m;
00315 LoggerSmartPtr anonymousLogger_m;
00316
00320 LoggerSmartPtr staticLogger_m;
00321
00325 LoggerList loggers_m;
00326 };
00327
00332 static ACE_Thread_Mutex loggersMutex_m;
00333
00337 static ConfigureLoggerFunction configureLoggerFunction_m;
00338
00339 };
00340
00341 };
00342
00343 #endif