diff options
author | Chris Wilson <chris+github@qwirx.com> | 2007-01-16 23:05:20 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2007-01-16 23:05:20 +0000 |
commit | e2589c461b68ad47b417e4969e1b51ef4f40447c (patch) | |
tree | 6544b45b086619e07ddaef30fb3062164d64c032 /lib/common | |
parent | c65a71fb2ab2484525ba702bd219bc36d57156ea (diff) |
Automatically initialise logging at startup, with a static object, to log
to console and syslog.
All logging objects automatically register themselves with the global
logging system. (refs #3)
Diffstat (limited to 'lib/common')
-rw-r--r-- | lib/common/Logging.cpp | 49 | ||||
-rw-r--r-- | lib/common/Logging.h | 12 |
2 files changed, 48 insertions, 13 deletions
diff --git a/lib/common/Logging.cpp b/lib/common/Logging.cpp index 3e2062da..5ecadc72 100644 --- a/lib/common/Logging.cpp +++ b/lib/common/Logging.cpp @@ -21,20 +21,41 @@ bool Logging::sContextSet = false; std::vector<Logger*> Logging::sLoggers; std::string Logging::sContext; -Console Logging::sConsole; -Syslog Logging::sSyslog; +Console* Logging::spConsole = NULL; +Syslog* Logging::spSyslog = NULL; Log::Level Logging::sGlobalLevel = Log::EVERYTHING; +Logging Logging::sGlobalLogging; //automatic initialisation + +Logging::Logging() +{ + ASSERT(!spConsole); + ASSERT(!spSyslog); + spConsole = new Console(); + spSyslog = new Syslog(); + sLogToConsole = true; + sLogToSyslog = true; +} + +Logging::~Logging() +{ + sLogToConsole = false; + sLogToSyslog = false; + delete spConsole; + delete spSyslog; + spConsole = NULL; + spSyslog = NULL; +} void Logging::ToSyslog(bool enabled) { if (!sLogToSyslog && enabled) { - Add(&sSyslog); + Add(spSyslog); } if (sLogToSyslog && !enabled) { - Remove(&sSyslog); + Remove(spSyslog); } sLogToSyslog = enabled; @@ -44,12 +65,12 @@ void Logging::ToConsole(bool enabled) { if (!sLogToConsole && enabled) { - Add(&sConsole); + Add(spConsole); } if (sLogToConsole && !enabled) { - Remove(&sConsole); + Remove(spConsole); } sLogToConsole = enabled; @@ -57,12 +78,12 @@ void Logging::ToConsole(bool enabled) void Logging::FilterConsole(Log::Level level) { - sConsole.Filter(level); + spConsole->Filter(level); } void Logging::FilterSyslog(Log::Level level) { - sSyslog.Filter(level); + spSyslog->Filter(level); } void Logging::Add(Logger* pNewLogger) @@ -140,6 +161,17 @@ void Logging::SetProgramName(const std::string& rProgramName) } } +Logger::Logger() +: mCurrentLevel(Log::EVERYTHING) +{ + Logging::Add(this); +} + +Logger::~Logger() +{ + Logging::Remove(this); +} + bool Console::Log(Log::Level level, const std::string& rFile, int line, std::string& rMessage) { @@ -176,6 +208,7 @@ bool Syslog::Log(Log::Level level, const std::string& rFile, case Log::FATAL: syslogLevel = LOG_CRIT; break; case Log::ERROR: syslogLevel = LOG_ERR; break; case Log::WARNING: syslogLevel = LOG_WARNING; break; + case Log::NOTICE: syslogLevel = LOG_NOTICE; break; case Log::INFO: syslogLevel = LOG_INFO; break; case Log::TRACE: /* fall through */ case Log::EVERYTHING: syslogLevel = LOG_DEBUG; break; diff --git a/lib/common/Logging.h b/lib/common/Logging.h index c85b4586..3a7b18b7 100644 --- a/lib/common/Logging.h +++ b/lib/common/Logging.h @@ -63,8 +63,8 @@ class Logger Log::Level mCurrentLevel; public: - Logger() : mCurrentLevel(Log::EVERYTHING) { } - virtual ~Logger() { } + Logger(); + virtual ~Logger(); virtual bool Log(Log::Level level, const std::string& rFile, int line, std::string& rMessage) = 0; @@ -136,12 +136,14 @@ class Logging static bool sLogToSyslog, sLogToConsole; static std::string sContext; static bool sContextSet; - static Console sConsole; - static Syslog sSyslog; + static Console* spConsole; + static Syslog* spSyslog; static Log::Level sGlobalLevel; + static Logging sGlobalLogging; public: - static void Init(const std::string& rProgramName); + Logging (); + ~Logging(); static void ToSyslog (bool enabled); static void ToConsole (bool enabled); static void FilterSyslog (Log::Level level); |