12constexpr std::string_view _error_color =
"\033[31m";
13constexpr std::string_view _info_color =
"\033[32m";
14constexpr std::string_view _warn_color =
"\033[33m";
15constexpr std::string_view _debug_color =
"\033[34m";
16constexpr std::string_view _time_color =
"\033[35m";
17constexpr std::string_view _role_color =
"\033[36m";
18constexpr std::string_view _reset_color =
"\033[0m";
21std::string current_timestamp() {
22 using namespace std::chrono;
23 const auto now = system_clock::now();
24 const auto time_t = system_clock::to_time_t(now);
28 localtime_s(&tm_snapshot, &time_t);
30 localtime_r(&time_t, &tm_snapshot);
33 auto micros = duration_cast<microseconds>(
now.time_since_epoch()) % 1'000'000;
35 std::ostringstream oss;
36 oss << std::put_time(&tm_snapshot,
"%H:%M:%S")
37 <<
'.' << std::setw(6) << std::setfill(
'0') << micros.count();
42void roboctrl::logger::set_level(log_level level) {
46roboctrl::log_level roboctrl::logger::level(){
47 return instance()._level.load();
50void roboctrl::log::logger::set_filter(
const std::string filter){
51 instance().filter_ = filter;
54static inline std::string_view level_to_color(roboctrl::log_level level){
56 case roboctrl::log_level::Debug:
58 case roboctrl::log_level::Info:
60 case roboctrl::log_level::Warn:
62 case roboctrl::log_level::Error:
69void roboctrl::logger::log_impl(log_level level, std::string_view role, std::string_view message) {
70 std::scoped_lock lock(_mutex);
71 auto &stream = (level == log_level::Error) ? std::cerr : std::cout;
72 const auto role_view = role.empty() ? std::string_view{
"-"} : role;
74 auto output = std::format(
"{}[{}]{} [{}] {}[{}]: {}{}{}",_time_color, current_timestamp(),level_to_color(level),
75 level_to_string(level),_role_color, role_view,level_to_color(level), message,_reset_color);
78 if(level >= log_level::Warn || output.contains(filter_)) {
79 stream << output <<
'\n';
83std::string_view roboctrl::logger::level_to_string(log_level level) {
85 case log_level::Debug:
91 case log_level::Error:
static log_level level()
获取日志等级
static logger & instance()
获取单例实例
auto now()
记录程序启动后的纳秒级时间戳。