28 if (
sizeof...(args) == 0) {
34 apply(f, std::forward<Args>(args)...);
35 }
catch (
const std::exception& e) {
41 const auto tp = std::chrono::system_clock::time_point(std::chrono::milliseconds(pack.time));
43 const char* level_str;
45 case LogLevel::TRACE: level_str =
"[TRACE]";
47 case LogLevel::DEBUG: level_str =
"[DEBUG]";
49 case LogLevel::INFO: level_str =
"[INFO]";
51 case LogLevel::WARN: level_str =
"[WARN]";
53 case LogLevel::ERROR: level_str =
"[ERROR]";
55 case LogLevel::FATAL: level_str =
"[FATAL]";
57 default: level_str =
"[OUT]";
61 std::time_t tt = std::chrono::system_clock::to_time_t(tp);
65 localtime_s(&tm, &tt);
66 #elif defined(__linux__) || defined(__APPLE__) || defined(__unix__)
67 localtime_r(&tt, &tm);
69 tm = *std::localtime(&tt);
72 std::ostringstream t_oss;
73 t_oss << std::put_time(&tm,
"%Y-%m-%d %H:%M:%S");
75 return (boost::format(
"%1% [%2%] %3% %4%")