14constexpr std::string_view _error_color =
"\033[31m";
15constexpr std::string_view _info_color =
"\033[32m";
16constexpr std::string_view _warn_color =
"\033[33m";
17constexpr std::string_view _debug_color =
"\033[34m";
18constexpr std::string_view _time_color =
"\033[35m";
19constexpr std::string_view _role_color =
"\033[36m";
20constexpr std::string_view _reset_color =
"\033[0m";
23std::string current_timestamp() {
24 using namespace std::chrono;
25 const auto now = system_clock::now();
26 const auto time_t = system_clock::to_time_t(now);
30 localtime_s(&tm_snapshot, &time_t);
32 localtime_r(&time_t, &tm_snapshot);
35 auto micros = duration_cast<microseconds>(
now.time_since_epoch()) % 1'000'000;
37 std::ostringstream oss;
38 oss << std::put_time(&tm_snapshot,
"%H:%M:%S")
39 <<
'.' << std::setw(6) << std::setfill(
'0') << micros.count();
44void roboctrl::logger::set_level(log_level level) {
48roboctrl::log_level roboctrl::logger::level(){
49 return instance()._level.load();
52void roboctrl::log::logger::set_filter(
const std::string
filter){
53 instance().filter_ =
filter;
56static inline std::string_view level_to_color(roboctrl::log_level level){
58 case roboctrl::log_level::Debug:
60 case roboctrl::log_level::Info:
62 case roboctrl::log_level::Warn:
64 case roboctrl::log_level::Error:
71void roboctrl::logger::log_impl(log_level level, std::string_view
role, std::string_view
message) {
72 std::scoped_lock
lock(_mutex);
73 auto &
stream = (level == log_level::Error) ? std::cerr : std::
cout;
76 auto output = std::format(
"{}[{}]{} [{}] {}[{}]: {}{}{}",_time_color,
current_timestamp(),level_to_color(level),
77 level_to_string(level),_role_color,
role_view,level_to_color(level),
message,_reset_color);
80 if(level >= log_level::Warn || output.contains(filter_))
81 std::println(
"{}",output);
84std::string_view roboctrl::logger::level_to_string(log_level level) {
86 case log_level::Debug:
92 case log_level::Error:
static log_level level()
获取日志等级
static logger & instance()
获取单例实例
asio::awaitable< T > awaitable
协程任务类型。
auto now()
记录程序启动后的纳秒级时间戳。