44 void log(
const std::string &message, LogLevel level)
override
47 log_msg.reserve(message.length() + 1+32+3+8+2);
56 log_msg.append(
"DEBUG ");
59 log_msg.append(
"INFO ");
61 case LogLevel::Warning:
62 log_msg.append(
"WARNING ");
65 log_msg.append(
"ERROR ");
67 case LogLevel::Critical:
68 log_msg.append(
"CRITICAL");
75 std::cerr << log_msg << std::endl;
79 static std::string timestamp()
86#if defined(_MSC_VER) || defined(__MINGW32__)
87#ifdef CROW_USE_LOCALTIMEZONE
88 localtime_s(&my_tm, &t);
93#ifdef CROW_USE_LOCALTIMEZONE
94 localtime_r(&t, &my_tm);
100 size_t sz = strftime(date,
sizeof(date),
"%Y-%m-%d %H:%M:%S", &my_tm);
101 return std::string(date, date + sz);
113#ifdef CROW_ENABLE_LOGGING
114 if (level_ >= get_current_log_level())
116 get_handler_ref()->log(stringstream_.str(), level_);
123 logger& operator<<(T
const& value)
125#ifdef CROW_ENABLE_LOGGING
126 if (level_ >= get_current_log_level())
128 stringstream_ << value;
135 static void setLogLevel(LogLevel level) { get_log_level_ref() = level; }
137 static void setHandler(
ILogHandler* handler) { get_handler_ref() = handler; }
139 static LogLevel get_current_log_level() {
return get_log_level_ref(); }
143 static LogLevel& get_log_level_ref()
145 static LogLevel current_level =
static_cast<LogLevel
>(CROW_LOG_LEVEL);
146 return current_level;
151 static ILogHandler* current_handler = &default_handler;
152 return current_handler;
156 std::ostringstream stringstream_;