#ifndef FMTLOG_H #define FMTLOG_H #include #include "fmt/core.h" #include "fmt/chrono.h" #include "fmt/color.h" #include /** * 说明:使用方式和使用fmt的print方式一样 * 输出格式如下 * [2024-09-01 23:10:50][widget.cpp:52] 你好 */ /* 取出文件名的正则表达式 */ const std::regex _reg_file(R"(.*/([\S]*[\.][\S]*)$)"); /* Debug输出 */ #define FMTLOG_DEBUG(...) \ do{ \ auto _now = std::chrono::system_clock::now(); \ std::time_t _now_c = std::chrono::system_clock::to_time_t(_now); \ std::string _log_time = fmt::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(_now_c)); \ std::string _log_file_src = __FILE__; \ auto _log_file = std::regex_replace(_log_file_src, _reg_file, "$1"); \ std::string _log_str = fmt::format(__VA_ARGS__); \ fmt::print(fg(fmt::color::blue), "[{}][{}:{}] {}\n",_log_time,_log_file ,__LINE__ ,_log_str); \ }while(0) /* 正常输出 */ #define FMTLOG_INFO(...) \ do{ \ auto _now = std::chrono::system_clock::now(); \ std::time_t _now_c = std::chrono::system_clock::to_time_t(_now); \ std::string _log_time = fmt::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(_now_c)); \ std::string _log_file_src = __FILE__; \ auto _log_file = std::regex_replace(_log_file_src, _reg_file, "$1"); \ std::string _log_str = fmt::format(__VA_ARGS__); \ fmt::print(fg(fmt::color::green), "[{}][{}:{}] {}\n",_log_time,_log_file ,__LINE__ ,_log_str); \ }while(0) /* Warn输出 */ #define FMTLOG_WARN(...) \ do{ \ auto _now = std::chrono::system_clock::now(); \ std::time_t _now_c = std::chrono::system_clock::to_time_t(_now); \ std::string _log_time = fmt::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(_now_c)); \ std::string _log_file_src = __FILE__; \ auto _log_file = std::regex_replace(_log_file_src, _reg_file, "$1"); \ std::string _log_str = fmt::format(__VA_ARGS__); \ fmt::print(fg(fmt::color::yellow), "[{}][{}:{}] {}\n",_log_time,_log_file ,__LINE__ ,_log_str); \ }while(0) /* 错误输出 */ #define FMTLOG_ERROR(...) \ do{ \ auto _now = std::chrono::system_clock::now(); \ std::time_t _now_c = std::chrono::system_clock::to_time_t(_now); \ std::string _log_time = fmt::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(_now_c)); \ std::string _log_file_src = __FILE__; \ auto _log_file = std::regex_replace(_log_file_src, _reg_file, "$1"); \ std::string _log_str = fmt::format(__VA_ARGS__); \ fmt::print(fg(fmt::color::red), "[{}][{}:{}] {}\n",_log_time,_log_file ,__LINE__ ,_log_str); \ }while(0) // void hello() // { // auto now = std::chrono::system_clock::now(); // std::time_t now_c = std::chrono::system_clock::to_time_t(now); // std::string _log_time = fmt::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(now_c)); // fmt::print(fg(fmt::color::green), "Hello, {}!\n", _log_time); // std::regex_replace("hello", _reg_file, "$1"); // } #endif /* FMTLOG_H */