diff options
author | ipknHama <ipknhama@gmail.com> | 2014-08-08 01:14:27 +0900 |
---|---|---|
committer | ipknHama <ipknhama@gmail.com> | 2014-08-08 01:14:27 +0900 |
commit | 001c66b378d200bdecc8a4a692c5a73a7d426b8f (patch) | |
tree | 110f1a6596242b7837c16f88b4838d6fd93dc93c /include/logging.h | |
parent | c36aa219e25e26019035fe3465471fd510778422 (diff) | |
download | crow-001c66b378d200bdecc8a4a692c5a73a7d426b8f.tar.gz crow-001c66b378d200bdecc8a4a692c5a73a7d426b8f.zip |
amalgamation added
Diffstat (limited to 'include/logging.h')
-rw-r--r-- | include/logging.h | 189 |
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) |