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