C ++的最小条件日志记录

时间:2015-12-01 01:38:10

标签: c++ logging embedded

我正在处理嵌入式项目,在代码中记录信息以进行调试非常方便,但是完全成熟的C ++记录器库在嵌入式环境中几乎不可用。 您能否建议如何实现简单,干净,快速的日志记录模块?我真的不需要对日志后端,输出,级别等进行精细控制。我只想启用和禁用日志记录语句模糊代码。目前我这样做:

#define DEBUG_ENCODER_PRINTF

// ...

#ifdef DEBUG_ENCODER_PRINTF
    debug_printf("enc: %d %d\r\n",
                 get_encoder_unwrapped(0),
                 get_encoder_unwrapped(1));
#endif

但是我已经有了许多不同的日志记录语句,许多预处理器定义使代码看起来很难看。

2 个答案:

答案 0 :(得分:5)

如果你这样做,你可以消除那些讨厌的#ifdef#endif

#ifdef DEBUG_ENCODER_PRINTF
    #define debug_encoder_printf debug_printf
#else
    #define debug_encoder_printf(...)
#endif

debug_encoder_printf("hi")现在会在定义debug_printf时调用DEBUG_ENCODER_PRINTF,但如果没有定义,预处理器将删除整个“调用”(替换为空)。 / p>

答案 1 :(得分:3)

我最后这样做了:

#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 %d\r\n",
             get_encoder_unwrapped(0),
             get_encoder_unwrapped(1));