提供异步、线程安全的多后端日志记录功能
更多...
提供异步、线程安全的多后端日志记录功能
- rm::Logger 负责管理独立的日志级别、异步队列、工作线程和输出后端; LoggerOptions 只保存各后端共用的配置。
- FileSink 、 SerialSink 和 UDPSink 分别封装对应输出后端的资源与写入行为。
- rm::std_logger 是进程内默认 stdout 日志器的懒加载代理,适合无需单独配置后端的通用日志场景。
- 自定义日志后端
- 自定义 Sink 需要在其所在命名空间中提供 sink_write_invoke 和 sink_flush_invoke,例如:
namespace custom {
struct BufferSink {
std::string *buffer;
};
bool sink_write_invoke(BufferSink &sink,
rm::LogLevel, std::string_view record)
noexcept {
sink.buffer->append(record);
return true;
}
bool sink_flush_invoke(BufferSink &) noexcept { return true; }
}
std::string output;
rm::Logger logger(custom::BufferSink{&output});
logger.info("custom sink: {}", 42);
logger.flush();
LogLevel
日志级别
定义 logger.hpp:60
◆ LogLevel
#include <rmvl/logger.hpp>
日志级别
| 枚举值 |
|---|
| Debug | 调试信息
|
| Info | 普通信息
|
| Warn | 警告信息
|
| Error | 错误信息
|
| Critical | 严重错误
|
| Off | 关闭日志
|
◆ LogOverflowPolicy
#include <rmvl/logger.hpp>
异步队列溢出策略
| 枚举值 |
|---|
| Block | 阻塞日志生产线程,直至队列有足够空间
|
| DropNewest | 丢弃当前日志
|
| DropOldest | 丢弃队列中最早的日志
|
◆ sink_flush
#include <rmvl/logger.hpp>
【定制点对象】日志后端持久化器
◆ sink_write
#include <rmvl/logger.hpp>
【定制点对象】日志后端写入器
◆ std_logger
#include <rmvl/logger.hpp>
stdout 默认线程安全日志器,首次使用时懒加载