From 031615ac866cc3c8f1900dd4b4aae2106ad31230 Mon Sep 17 00:00:00 2001 From: ipknHama Date: Thu, 7 Aug 2014 01:18:33 +0900 Subject: source resturcturing + CMake --- include/logging.h | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 include/logging.h (limited to 'include/logging.h') diff --git a/include/logging.h b/include/logging.h new file mode 100644 index 0000000..b43a969 --- /dev/null +++ b/include/logging.h @@ -0,0 +1,111 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" + +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 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 + 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 handler) { + currentHandler = handler; + } + + private: + + // + ostringstream m_stringStream; + string m_prefix; + LogLevel m_level; + }; + + // + LogLevel logger::currentLevel = (LogLevel)CROW_LOG_LEVEL; + std::shared_ptr logger::currentHandler = std::make_shared(); + +} + +#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) + + + -- cgit v1.2.3-54-g00ecf