更新:1、修改日志组件,使用spdlog日志库;
Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -2,26 +2,46 @@
|
||||
#define RDP_LOG_H
|
||||
#pragma once
|
||||
/*************************************日志输出模块*******************************************/
|
||||
// 功能:
|
||||
// 1) rdp_log::Init():按 parameters.h 中 RDP_LOG_ENABLE 宏开关决定是否将 std::cout
|
||||
// 重定向到日志文件(RDP_LOG_DIR 目录,文件名按当前日期+时间自动生成)。
|
||||
// 开关关闭(注释掉 RDP_LOG_ENABLE)时不做重定向,日志仍输出到标准输出。
|
||||
// 2) rdp_log::Shutdown():恢复 std::cout 原始缓冲区(回到控制台)并关闭日志文件。
|
||||
// 3) RDP_LOG 宏:日志输出宏,在每条日志前自动附加 [时间戳][代码文件:行号] 信息,
|
||||
// 随后输出到 std::cout(若开关开启则随 cout 一并写入日志文件)。
|
||||
// 用法示例:
|
||||
// RDP_LOG << "目标批号:" << track_index << std::endl;
|
||||
#include <iostream>
|
||||
// 基于 spdlog v1.17.0(third_party/spdlog,来源/版本见该目录 UPSTREAM.md,以静态库目标
|
||||
// spdlog 链接,见 CMakeLists.txt):
|
||||
// 1) rdp_log::Init():创建 RDP_LOG_DIR 下按「日期+时间」命名的日志文件(每次初始化一个
|
||||
// 文件;同一秒内文件已存在时追加 _1~_999 后缀),默认 logger 同时输出到 标准输出 与
|
||||
// 日志文件 两个 sink。由 Data_Process_Factory::GetB() 调用;
|
||||
// 2) rdp_log::Shutdown():打印结束标记、flush 并释放 logger(关闭日志文件),由
|
||||
// Data_Process_Factory::Destroy() 调用;
|
||||
// 3) 日志宏 RDP_LOG_TRACE / RDP_LOG_DEBUG / RDP_LOG_INFO / RDP_LOG_WARN /
|
||||
// RDP_LOG_ERROR / RDP_LOG_CRITICAL:级别与 spdlog 一致(RDP_LOG_ERR 为
|
||||
// RDP_LOG_ERROR 的别名),支持 fmt 风格的格式化,用法示例:
|
||||
// RDP_LOG_INFO("目标批号:{},时间:{}", track_index, cpi_time);
|
||||
// 低于 SPDLOG_ACTIVE_LEVEL 的日志调用在编译期被剔除(实参不求值),该级别由 CMake
|
||||
// 选项 RDP_LOG_LEVEL 控制(见 CMakeLists.txt 与 README 10.4),即原 RDP_LOG_ENABLE
|
||||
// 开关改由 SPDLOG_ACTIVE_LEVEL 在编译期控制日志级别(OFF = 编译期关闭全部日志)。
|
||||
//
|
||||
// 日志文件路径/名称与旧实现保持一致:RDP_LOG_DIR(.\rdp_logs\)+ rdp_YYYYMMDD_HHMMSS.log。
|
||||
// 日志行格式:"[YYYY-MM-DD HH:MM:SS.mmm] [级别] [文件名:行号] 内容",级别为 spdlog 默认
|
||||
// 名称 trace/debug/info/warning/error/critical。
|
||||
#include <string>
|
||||
|
||||
// 第三方头文件告警隔离:spdlog 按 third_party 依赖处理(见 README 4.5)
|
||||
#pragma warning(push, 0)
|
||||
#include <spdlog/spdlog.h>
|
||||
#pragma warning(pop)
|
||||
|
||||
namespace rdp_log
|
||||
{
|
||||
bool Init(); //初始化日志输出(由 Data_Process_Factory::GetB() 调用)
|
||||
void Shutdown(); //恢复 std::cout 并关闭日志文件(由 Data_Process_Factory::Destroy() 调用)
|
||||
std::string prefix(const char *file, int line); //生成 "[时间戳][文件名:行号] " 前缀字符串
|
||||
bool Init(); //初始化日志输出(标准输出 + 日志文件;由 GetB() 调用)
|
||||
void Shutdown(); //flush、释放 logger 并关闭日志文件(由 Destroy() 调用)
|
||||
std::string log_file_path(); //当前日志文件全路径(未初始化或文件创建失败时为空串)
|
||||
}
|
||||
|
||||
//日志输出宏:自动附加 时间戳、代码文件、代码行号 后输出到标准输出(std::cout)
|
||||
#define RDP_LOG std::cout << rdp_log::prefix(__FILE__, __LINE__)
|
||||
//日志级别宏(spdlog 编译期级别过滤:低于 SPDLOG_ACTIVE_LEVEL 的调用被剔除、实参不求值)
|
||||
#define RDP_LOG_TRACE(...) SPDLOG_TRACE(__VA_ARGS__)
|
||||
#define RDP_LOG_DEBUG(...) SPDLOG_DEBUG(__VA_ARGS__)
|
||||
#define RDP_LOG_INFO(...) SPDLOG_INFO(__VA_ARGS__)
|
||||
#define RDP_LOG_WARN(...) SPDLOG_WARN(__VA_ARGS__)
|
||||
#define RDP_LOG_ERROR(...) SPDLOG_ERROR(__VA_ARGS__)
|
||||
#define RDP_LOG_CRITICAL(...) SPDLOG_CRITICAL(__VA_ARGS__)
|
||||
//兼容别名:需求中的级别名 err 对应 spdlog::level::err,宏名同时提供 RDP_LOG_ERR
|
||||
#define RDP_LOG_ERR(...) RDP_LOG_ERROR(__VA_ARGS__)
|
||||
|
||||
#endif // RDP_LOG_H
|
||||
|
||||
Reference in New Issue
Block a user