更好的方法来进行调试日志记录?

时间:2014-02-21 17:39:12

标签: c++ c logging

在整个代码中是否有更好的,可能更行业标准的方式来打开和关闭调试日志记录?

我目前的情况与此类似:

#define logging

[.. in several places throughout the code ..]

#ifdef logging
   cout << "My debug messages\n";
#endif

我只是在不再需要#define logging时将其注释掉。 这种方法的一些缺点似乎是:

  • 我要在
  • 中使用的每个文件中#define logging
  • 它不是很强大;我更喜欢像#define logging 1这样的东西,并且能够检查启用了哪个日志级别来确定我的调试输出的粒度。不幸的是,据我所知,#ifdef并不关心你选择什么价值,它只关心它是定义的

有关于如何更好地实现这一点的建议吗?

3 个答案:

答案 0 :(得分:2)

  

它不是很强大;我更喜欢#define logging 1之类的东西,并且能够检查启用了哪个日志级别来确定我的调试输出的粒度。

那你为什么不这样做?只是不要使用#ifdef进行测试,而是使用#if进行测试:

#if logging>1
  // something
#endif

此外 - 您可以在单独的文件(例如logging)中定义myDefines.h并将其包含在其他文件中。

//myDefines.h
#define logging 2

//someOtherFile.h
#include "myDefines.h"

#if logging>1
   // something
#endif

答案 1 :(得分:1)

一个建议:

您可以在项目设置中#define logging而不是在要使用它的每个文件中。

答案 2 :(得分:1)

您可能想要查看Google的glog项目:https://code.google.com/p/google-glog/ 但这可能比你正在寻找的开销更大。

你可以尝试一些简单的方法,授予你的权利  编译器支持-Dmacroname标志,你可以转 在编译期间进行日志记录。例如:

g++ -Dlogging program.cpp -o program

将日志记录宏定义为1。