C++的最小条件日志记录
Minimal conditional logging for C++
我正在开发嵌入式项目,为了调试目的,在代码中记录信息非常方便,但完整的C++记录器库在嵌入式环境中很难使用你能建议如何实现简单、干净、快速的日志记录模块吗我真的不需要对日志后端、输出、级别等进行精细控制。我只想在不模糊代码的情况下启用和禁用日志语句。目前我是这样做的:
#define DEBUG_ENCODER_PRINTF
// ...
#ifdef DEBUG_ENCODER_PRINTF
debug_printf("enc: %d %drn",
get_encoder_unwrapped(0),
get_encoder_unwrapped(1));
#endif
但我已经有了几十个不同的日志记录语句,而且很多预处理器定义让代码看起来很难看。
如果你这样做,你可以消除那些讨厌的#ifdef
和#endif
:
#ifdef DEBUG_ENCODER_PRINTF
#define debug_encoder_printf debug_printf
#else
#define debug_encoder_printf(...)
#endif
当定义了DEBUG_ENCODER_PRINTF
时,debug_encoder_printf("hi")
现在将调用debug_printf
,但如果未定义,则预处理器将删除整个"调用"(不替换任何内容)。
我最后是这样做的:
#define DEBUG_PRINTF_ENABLED
#define DEBUG_SONAR_PRINTF false
#define DEBUG_ENCODER_PRINTF true
// ...
#ifdef DEBUG_PRINTF_ENABLED
# define DEBUG_PRINTF(logger, pFormat, ...)
{ if (DEBUG_##logger##_PRINTF) debug_printf(pFormat, __VA_ARGS__); }
#else
# define DEBUG_PRINTF(...)
#endif
// ...
DEBUG_PRINTF(ENCODER,
"enc: %d %drn",
get_encoder_unwrapped(0),
get_encoder_unwrapped(1));
相关文章:
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- C++ 中混合二进制/文本日志记录的最佳做法
- 轻松日志记录++如何避免多个初始化
- 使用字符串流加速 std::cout 日志记录
- 我的游戏引擎的 spdlog 日志记录出现奇怪的"unresolved external symbol"错误
- 使用 #define 进行跟踪日志记录以避免性能问题
- 如何在代码中启用/禁用 spdlog 日志记录?
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 使用 Python、ROS 和 C++ 进行日志记录
- C++日志记录类实例标识符
- 如何在C++中重载<<线程安全日志记录的运算符?
- 在 C++17 中将无限参数传递给日志记录函数
- 配置 log4cpp 日志记录级别优先级
- 如何使用 Boost V2 1.70 日志记录库在第一个索引(例如 logtrail01.txt)保留最新的日志文件名?
- 如何将日志记录写入Visual Studio输出窗口?
- 使用现有日志记录库 (C++) 限制日志大小
- "正在初始化":无法从"事件日志记录 *"转换为"事件日志记录 []"
- 提升日志记录text_file_backend没有wchar_t版本?
- 多线程应用程序中的独立日志记录
- C++类似cout的函数,将数据写入文件(日志记录)