summaryrefslogtreecommitdiff
path: root/lib/common
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2007-01-16 23:05:20 +0000
committerChris Wilson <chris+github@qwirx.com>2007-01-16 23:05:20 +0000
commite2589c461b68ad47b417e4969e1b51ef4f40447c (patch)
tree6544b45b086619e07ddaef30fb3062164d64c032 /lib/common
parentc65a71fb2ab2484525ba702bd219bc36d57156ea (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.cpp49
-rw-r--r--lib/common/Logging.h12
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);