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

标签 c++ performance logging log4cxx

我使用 log4cxx用于记录。但是,日志记录可能会引入一些我需要尽量减少的性能开销。

如何关闭日志记录(在运行时或编译时)以便将开销降至最低 - 除了从代码中删除所有日志语句之外?

文档指出

The user should be aware of the following performance issues.

Logging performance when logging is turned off.

When logging is turned off entirely or just for a set of levels, the cost of a log request consists of a method invocation plus an integer comparison. The LOG4CXX_DEBUG and similar macros suppress unnecessary expression evaluation if the request is not enabled.

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

最佳答案

如果你真的想在编译时禁用所有日志记录,只需将 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) 

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

关于c++ - 使用 log4cxx 关闭日志记录以最小化开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14769878/

相关文章:

c++ - Kcachegrind。仅显示我的代码中的函数

c++ - 如何使用 boost.lambda 和 boost.range 从容器中进行选择?

java - 奇怪的分支性能

Android onDraw() 是一个可疑的方法调用

logging - RSpec:如何测试 Rails 记录器消息期望?

c++ - 我应该在复制赋值运算符中使用 placement-new

Java:空循环使用多少时间?

java - 如何将 log4j 输出文件设置为相对于我的 jar?

python - 两个 Pylons 记录器处理程序(Sentry/Raven 和控制台)用于相同的 qualname

c++ - 没有工厂就无法实例化的参数化工厂和产品类