现有ç/C++的日志方案。原来,Pantheios可能是在我的情况最好的一些调查,这是最低的开销,如果日志被禁用。C/C++日志工具调用取决于日志级别
所有的记录器似乎都支持某种打印日志消息。但是,在我的情况下,我有一个函数调用,应该避免日志记录被禁用(因为它非常昂贵)。
目前,我用一个很简单的记录设置像
#ifdef DEBUG_L1
cout << "msg 1" << endl // log level 1
#ifdef DEBUG_L2
printBuffer() // log level 2
#endif
#endif
,供应我的需要(现在),因为我付出零开销,如果日志被禁用。然而,代码很快看起来很丑,并且不太灵活。
这应该用C++记录器来实现。如上所述,printBuffer()
的功能体非常昂贵。如果日志记录关闭,则可以避免调用它。
是否有可能声明一个完整的函数调用只在高于某个日志级别时执行?或者在这种情况下我还需要预处理器吗?
编辑:
谢谢@BobTFish。我实际上正在考虑使用你所描述的那种设置。我想知道如何灵活地实现这种事情。通常我会记录一组字符串和值(int
,float
和指针)。在风格
cout << "name1=" << int << " name2=" << (void*)(ptr) << endl;
现在,我真的不喜欢在此时切换到printf
的语法。宏观方法如何处理(因为它只用一个类参数进行模板化)?
请说明是否可以在运行时更改日志级别(包括从配置文件读取),而不是编译为 – 2016-02-01 03:05:15