使用 log4cxx 关闭日志记录以最小化开销

cls*_*udt 3 c++ performance logging log4cxx

我使用log4cxx进行日志记录。但是,日志记录可能会带来一些性能开销,我需要将其最小化。

如何关闭日志记录(在运行时或编译时)以使开销最小化 - 无需从代码中删除所有日志语句?

该文档指出

用户应该注意以下性能问题。

关闭日志记录时的日志记录性能。

当完全关闭日志记录或仅关闭一组级别的日志记录时,日志请求的成本包括方法调用加上整数比较。如果未启用请求,则 LOG4CXX_DEBUG 和类似的宏会抑制不必要的表达式计算。

但如何完全关闭它呢?这是可以实现的最小开销吗?

jme*_*lfe 5

如果您确实想在编译时禁用所有日志记录,只需将 log4cxx 宏重新定义为空即可,即

#define LOG4CXX_TRACE(logger, expression)    
#define LOG4CXX_DEBUG(logger, expression)    
#define LOG4CXX_INFO(logger, expression)   
#define LOG4CXX_WARN(logger, expression)    
#define LOG4CXX_ERROR(logger, expression)    
#define LOG4CXX_FATAL(logger, expression) 
Run Code Online (Sandbox Code Playgroud)

零开销。对于运行时的情况,你总是需要承担一些成本。快速浏览一下,我实际上使开销比他们的文档所说的稍大,通常涉及额外的虚拟方法调用。这本质上是使用该库的最小开销,尽管您可能会使用链接时间优化等来消除方法调用开销,从而获得一些非常小的改进。