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
31struct LogData
32{
35 const char* file;
36 uint32_t line;
37 char message[XR_LOG_MESSAGE_MAX_LEN];
38};
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
76 static const char* GetColor(LogLevel level);
77
83 static const char* LevelToString(LogLevel level);
84
85 static inline bool initialized_ = false;
86};
87
88} // namespace LibXR
89
90#if LIBXR_LOG_LEVEL >= 4
94#define XR_LOG_DEBUG(fmt, ...) \
95 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, \
96 ##__VA_ARGS__)
97#else
98#define XR_LOG_DEBUG(...)
99#endif
100
101#if LIBXR_LOG_LEVEL >= 3
105#define XR_LOG_INFO(fmt, ...) \
106 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, \
107 ##__VA_ARGS__)
108#else
109#define XR_LOG_INFO(...)
110#endif
111
112#if LIBXR_LOG_LEVEL >= 2
116#define XR_LOG_PASS(fmt, ...) \
117 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_PASS, __FILE__, __LINE__, fmt, \
118 ##__VA_ARGS__)
119#else
120#define XR_LOG_PASS(...)
121#endif
122
123#if LIBXR_LOG_LEVEL >= 1
127#define XR_LOG_WARN(fmt, ...) \
128 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, \
129 ##__VA_ARGS__)
130#else
131#define XR_LOG_WARN(...)
132#endif
133
134#if LIBXR_LOG_LEVEL >= 0
138#define XR_LOG_ERROR(fmt, ...) \
139 LibXR::Logger::Publish(LibXR::LogLevel::XR_LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, \
140 ##__VA_ARGS__)
141#else
142#define XR_LOG_ERROR(...)
143#endif
日志管理器 / LibXR Logger Manager
Definition logger.hpp:45
static void PrintToTerminal(const LogData &data)
打印日志到终端 / Print log to terminal
Definition logger.cpp:64
static const char * LevelToString(LogLevel level)
将日志级别转换为字符串 / Convert log level to string
Definition logger.cpp:92
static void Init()
初始化日志主题 / Initialize the log topic
Definition logger.cpp:15
static void Publish(LogLevel level, const char *file, uint32_t line, const char *fmt,...)
发布一条日志 / Publish a log message
Definition logger.cpp:42
static const char * GetColor(LogLevel level)
根据日志级别获取显示颜色 / Get color code based on log level
Definition logger.cpp:73
表示毫秒级时间戳的类。Class representing a timestamp in milliseconds.
LibXR 命名空间
Definition ch32_gpio.hpp:9
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
MillisecondTimestamp timestamp
时间戳 / Timestamp
Definition logger.hpp:33
char message[XR_LOG_MESSAGE_MAX_LEN]
日志消息内容 / Log message content
Definition logger.hpp:37