From 7d0b17ba882172edff04f3c60bdf8cd6ba42c150 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 31 May 2012 16:59:58 -0700 Subject: [PATCH] Trivial logging subsystem. --- src/Log.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/Log.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/Log.cpp create mode 100644 src/Log.h diff --git a/src/Log.cpp b/src/Log.cpp new file mode 100644 index 0000000000..ded888a6d6 --- /dev/null +++ b/src/Log.cpp @@ -0,0 +1,38 @@ + +#include "Log.h" + +#include + +boost::recursive_mutex Log::sLock; + +#ifdef DEBUG +LogSeverity Log::sMinSeverity = lsTRACE; +#else +LogSeverity Log::sMinSeverity = lsINFO; +#endif + +Log::~Log() +{ + std::string logMsg = boost::posix_time::to_simple_string(boost::posix_time::second_clock::universal_time()); + switch (mSeverity) + { + case lsTRACE: logMsg += " TRAC "; break; + case lsDEBUG: logMsg += " DEBG "; break; + case lsINFO: logMsg += " INFO "; break; + case lsWARNING: logMsg += " WARN "; break; + case lsERROR: logMsg += " EROR "; break; + case lsFATAL: logMsg += " FATL "; break; + } + logMsg += oss.str(); + boost::recursive_mutex::scoped_lock sl(sLock); + if (mSeverity >= sMinSeverity) + { + std::cerr << logMsg << std::endl; + } +} + +void Log::setMinSeverity(LogSeverity s) +{ + boost::recursive_mutex::scoped_lock sl(sLock); + sMinSeverity = s; +} diff --git a/src/Log.h b/src/Log.h new file mode 100644 index 0000000000..65615e0fcd --- /dev/null +++ b/src/Log.h @@ -0,0 +1,45 @@ +#ifndef __LOG__ +#define __LOG__ + +#include + +#include + +enum LogSeverity +{ + lsTRACE = 0, + lsDEBUG = 1, + lsINFO = 2, + lsWARNING = 3, + lsERROR = 4, + lsFATAL = 5 +}; + +class Log +{ +private: + Log(const Log&); // no implementation + Log& operator=(const Log&); // no implementation + +protected: + static boost::recursive_mutex sLock; + static LogSeverity sMinSeverity; + + mutable std::ostringstream oss; + LogSeverity mSeverity; + +public: + Log(LogSeverity s) : mSeverity(s) + { ; } + + ~Log(); + + template std::ostream& operator<<(const T& t) const + { + return oss << t; + } + + static void setMinSeverity(LogSeverity); +}; + +#endif