aboutsummaryrefslogtreecommitdiffstats
path: root/include/logging.h
diff options
context:
space:
mode:
authoripknHama <ipknhama@gmail.com>2014-08-08 01:14:27 +0900
committeripknHama <ipknhama@gmail.com>2014-08-08 01:14:27 +0900
commit001c66b378d200bdecc8a4a692c5a73a7d426b8f (patch)
tree110f1a6596242b7837c16f88b4838d6fd93dc93c /include/logging.h
parentc36aa219e25e26019035fe3465471fd510778422 (diff)
downloadcrow-001c66b378d200bdecc8a4a692c5a73a7d426b8f.tar.gz
crow-001c66b378d200bdecc8a4a692c5a73a7d426b8f.zip
amalgamation added
Diffstat (limited to 'include/logging.h')
-rw-r--r--include/logging.h189
1 files changed, 99 insertions, 90 deletions
diff --git a/include/logging.h b/include/logging.h
index 2984cce..0a15e86 100644
--- a/include/logging.h
+++ b/include/logging.h
@@ -13,98 +13,107 @@ using namespace std;
namespace crow
{
- enum class LogLevel
- {
- CRITICAL,
- ERROR,
- WARNING,
- INFO,
- DEBUG
- };
-
- class ILogHandler {
- public:
- virtual void log(string message, LogLevel level) = 0;
- };
-
- class CerrLogHandler : public ILogHandler {
- public:
- void log(string message, LogLevel level) override {
- cerr << message;
- }
- };
-
- class logger {
-
- private:
- //
- static string timeStamp()
- {
- char date[32];
- time_t t = time(0);
- strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S", gmtime(&t));
- return string(date);
- }
-
- public:
-
- //
- static LogLevel currentLevel;
- static std::shared_ptr<ILogHandler> currentHandler;
-
- logger(string prefix, LogLevel level) : m_prefix(prefix), m_level(level) {
-
- }
- ~logger() {
- #ifdef CROW_ENABLE_LOGGING
- if(m_level <= currentLevel) {
- ostringstream str;
- str << "(" << timeStamp() << ") [" << m_prefix << "] " << m_stringStream.str() << endl;
- currentHandler->log(str.str(), m_level);
- }
- #endif
- }
-
- //
- template <typename T>
- logger& operator<<(T const &value) {
-
- #ifdef CROW_ENABLE_LOGGING
- if(m_level <= currentLevel) {
- m_stringStream << value;
- }
- #endif
- return *this;
- }
-
- //
- static void setLogLevel(LogLevel level) {
- currentLevel = level;
- }
-
- static void setHandler(std::shared_ptr<ILogHandler> handler) {
- currentHandler = handler;
- }
-
- private:
-
- //
- ostringstream m_stringStream;
- string m_prefix;
- LogLevel m_level;
- };
-
- //
- LogLevel logger::currentLevel = (LogLevel)CROW_LOG_LEVEL;
- std::shared_ptr<ILogHandler> logger::currentHandler = std::make_shared<CerrLogHandler>();
-
+ enum class LogLevel
+ {
+ DEBUG,
+ INFO,
+ WARNING,
+ ERROR,
+ CRITICAL,
+ };
+
+ class ILogHandler {
+ public:
+ virtual void log(string message, LogLevel level) = 0;
+ };
+
+ class CerrLogHandler : public ILogHandler {
+ public:
+ void log(string message, LogLevel level) override {
+ cerr << message;
+ }
+ };
+
+ class logger {
+
+ private:
+ //
+ static string timestamp()
+ {
+ char date[32];
+ time_t t = time(0);
+ strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S", gmtime(&t));
+ return string(date);
+ }
+
+ public:
+
+
+ logger(string prefix, LogLevel level) : level_(level) {
+ #ifdef CROW_ENABLE_LOGGING
+ stringstream_ << "(" << timestamp() << ") [" << prefix << "] ";
+ #endif
+
+ }
+ ~logger() {
+ #ifdef CROW_ENABLE_LOGGING
+ if(level_ >= get_current_log_level()) {
+ stringstream_ << endl;
+ get_handler_ref()->log(stringstream_.str(), level_);
+ }
+ #endif
+ }
+
+ //
+ template <typename T>
+ logger& operator<<(T const &value) {
+
+ #ifdef CROW_ENABLE_LOGGING
+ if(level_ >= get_current_log_level()) {
+ stringstream_ << value;
+ }
+ #endif
+ return *this;
+ }
+
+ //
+ static void setLogLevel(LogLevel level) {
+ get_log_level_ref() = level;
+ }
+
+ static void setHandler(ILogHandler* handler) {
+ get_handler_ref() = handler;
+ }
+
+ static LogLevel get_current_log_level() {
+ return get_log_level_ref();
+ }
+
+ private:
+ //
+ static LogLevel& get_log_level_ref()
+ {
+ static LogLevel current_level = (LogLevel)CROW_LOG_LEVEL;
+ return current_level;
+ }
+ static ILogHandler*& get_handler_ref()
+ {
+ static CerrLogHandler default_handler;
+ static ILogHandler* current_handler = &default_handler;
+ return current_handler;
+ }
+
+ //
+ ostringstream stringstream_;
+ LogLevel level_;
+ };
}
-#define CROW_LOG_CRITICAL crow::logger("CRITICAL", crow::LogLevel::CRITICAL)
-#define CROW_LOG_ERROR crow::logger("ERROR ", crow::LogLevel::ERROR)
-#define CROW_LOG_WARNING crow::logger("WARNING ", crow::LogLevel::WARNING)
-#define CROW_LOG_INFO crow::logger("INFO ", crow::LogLevel::INFO)
-#define CROW_LOG_DEBUG crow::logger("DEBUG ", crow::LogLevel::DEBUG)
+#define CROW_LOG_CRITICAL crow::logger("CRITICAL", crow::LogLevel::CRITICAL)
+#define CROW_LOG_ERROR crow::logger("ERROR ", crow::LogLevel::ERROR)
+#define CROW_LOG_WARNING crow::logger("WARNING ", crow::LogLevel::WARNING)
+#define CROW_LOG_INFO crow::logger("INFO ", crow::LogLevel::INFO)
+#define CROW_LOG_DEBUG crow::logger("DEBUG ", crow::LogLevel::DEBUG)