libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
logger.hpp
1#pragma once
2
3#include <cstdarg>
4#include <cstdint>
5#include <cstdio>
6
7#include "libxr_color.hpp"
8#include "libxr_rw.hpp"
9#include "libxr_time.hpp"
10
11namespace LibXR
12{
13
26
39
44class Logger
45{
46 public:
50 static void Init();
51
60 // NOLINTNEXTLINE
61 static void Publish(LogLevel level, const char* file, uint32_t line, const char* fmt,
62 ...);
63
64 private:
69 static void PrintToTerminal(const LogData& data)
70 {
71 const char* color = GetColor(data.level);
72
73 STDIO::Printf("%s[%u][%s](%s:%u) %s%s\r\n", color,
74 static_cast<uint32_t>(data.timestamp), LevelToString(data.level),
75 data.file, data.line, data.message,
76 LIBXR_FORMAT_STR[static_cast<uint8_t>(Format::RESET)]);
77 }
78
84 static const char* GetColor(LogLevel level)
85 {
86 using namespace LibXR;
87 switch (level)
88 {
90 return LIBXR_FONT_STR[static_cast<uint8_t>(Font::MAGENTA)];
92 return LIBXR_FONT_STR[static_cast<uint8_t>(Font::CYAN)];
94 return LIBXR_FONT_STR[static_cast<uint8_t>(Font::GREEN)];
96 return LIBXR_FONT_STR[static_cast<uint8_t>(Font::YELLOW)];
98 return LIBXR_FONT_STR[static_cast<uint8_t>(Font::RED)];
99 default:
100 return "";
101 }
102 }
103
109 static const char* LevelToString(LogLevel level)
110 {
111 switch (level)
112 {
114 return "DEBUG";
116 return "INFO";
118 return "PASS";
120 return "WARN";
122 return "ERROR";
123 default:
124 return "UNKNOWN";
125 }
126 }
127
128 static inline std::atomic<bool> initialized_ = false;
129};
130
131} // namespace LibXR
132
133#if LIBXR_LOG_LEVEL >= 4
137#define XR_LOG_DEBUG(fmt, ...) \
138 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, \
139 ##__VA_ARGS__)
140#else
141#define XR_LOG_DEBUG(...)
142#endif
143
144#if LIBXR_LOG_LEVEL >= 3
148#define XR_LOG_INFO(fmt, ...) \
149 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, \
150 ##__VA_ARGS__)
151#else
152#define XR_LOG_INFO(...)
153#endif
154
155#if LIBXR_LOG_LEVEL >= 2
159#define XR_LOG_PASS(fmt, ...) \
160 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_PASS, __FILE__, __LINE__, fmt, \
161 ##__VA_ARGS__)
162#else
163#define XR_LOG_PASS(...)
164#endif
165
166#if LIBXR_LOG_LEVEL >= 1
170#define XR_LOG_WARN(fmt, ...) \
171 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, \
172 ##__VA_ARGS__)
173#else
174#define XR_LOG_WARN(...)
175#endif
176
177#if LIBXR_LOG_LEVEL >= 0
181#define XR_LOG_ERROR(fmt, ...) \
182 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, \
183 ##__VA_ARGS__)
184#else
185#define XR_LOG_ERROR(...)
186#endif
LibXR 日志管理器 / LibXR Logger Manager.
Definition logger.hpp:45
static const char * GetColor(LogLevel level)
根据日志级别获取显示颜色 / Get color code based on log level
Definition logger.hpp:84
static void Init()
初始化日志主题 / Initialize the log topic
Definition logger.cpp:15
static const char * LevelToString(LogLevel level)
将日志级别转换为字符串 / Convert log level to string
Definition logger.hpp:109
static void Publish(LogLevel level, const char *file, uint32_t line, const char *fmt,...)
发布一条日志 / Publish a log message
Definition logger.cpp:42
static void PrintToTerminal(const LogData &data)
打印日志到终端 / Print log to terminal
Definition logger.hpp:69
static int Printf(const char *fmt,...)
Prints a formatted string to the write port (like printf).
Definition libxr_rw.hpp:710
表示毫秒级时间戳的类。Class representing a timestamp in milliseconds.
LibXR Color Control Library / LibXR终端颜色控制库
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值
constexpr const char * LIBXR_FONT_STR[]
ANSI escape sequences for font color / ANSI转义序列 - 字体颜色
constexpr const char * LIBXR_FORMAT_STR[]
ANSI escape sequences for text format / ANSI转义序列 - 文本格式
LogLevel
日志级别枚举 / Log level enumeration
Definition logger.hpp:19
@ XR_LOG_LEVEL_INFO
一般信息 / Informational message
@ XR_LOG_LEVEL_DEBUG
调试信息 / Debug message
@ XR_LOG_LEVEL_WARN
警告信息 / Warning message
@ XR_LOG_LEVEL_ERROR
错误信息 / Error message
@ XR_LOG_LEVEL_PASS
通过信息 / Pass message
日志数据结构体 / Log data structure
Definition logger.hpp:32
uint32_t line
行号 / Line number
Definition logger.hpp:36
const char * file
文件名指针 / Source file name pointer
Definition logger.hpp:35
LogLevel level
日志级别 / Log level
Definition logger.hpp:34
TimestampMS timestamp
时间戳 / Timestamp
Definition logger.hpp:33
char message[XR_LOG_MESSAGE_MAX_LEN]
日志消息内容 / Log message content
Definition logger.hpp:37