【问题标题】:Is Log4cplus really so slow?Log4cplus真的那么慢吗?
【发布时间】:2011-11-12 09:34:07
【问题描述】:

我一直在为我的 C++ 日志子系统测试三个选项。一个是 Log4cplus,一个是 Pantheios,最后一个是我们自己编写的简单日志库。

Log4cplus 比其他两个慢得多。以下是记录 1,000,000 条日志条目的结果:

  • log4cplus:200 秒编辑:设置缓冲区大小将其减少到 120
  • 我的记录器:55 秒
  • Pantheios:35

我想知道我是否缺少任何性能调整。

我应该补充一点,我一直在使用根记录器,我正在记录到文件并记录: LOG4CPLUS_INFO(rootLogger, "Replace me with the text!");

谢谢, 雷扎

【问题讨论】:

  • 能发一下Log4cplus的配置和rootLogger的获取方式吗?
  • @RezaPlusPlus:另外,你用的是什么版本的 log4cplus?
  • 这里是配置:log4cplus.rootLogger=INFO, R log4cplus.appender.R=log4cplus::FileAppender log4cplus.appender.R.File=c:\logs\log4cplusLog.log 我得到根记录器为:rootLogger = log4cplus::Logger::getRoot();

标签: c++ performance logging pantheios log4cplus


【解决方案1】:

performance_test 中使用log4cplus::NullAppender 在半加载的FreeBSD 服务器上给我Logging 1000000 took: 4sec 343709usec。 IOW,纯日志记录开销相当小。您的记录时间似乎取决于目标记录器。如果你使用log4cplus::FileAppender,时间会有很大的不同。

编辑:

您需要稍微调整一下FileAppender。确保将 ImmediateFlush 属性设置为 false。您还可以将 BufferSize 设置为更大的值,例如 1000000 字节。

【讨论】:

  • 最后,我将使用 FileAppender。这是否意味着我应该编写自己的 fileappender 以使其更快?
  • @RezaPlusPlus:速度永远不是最重要的。有些人在崩溃时更喜欢可靠的日志,因此ImmediateFlush 的默认值为true
  • 好点。但我想我的其他两个图书馆也会这样做。他们还写入文件并将缓冲区刷新到文件。可能是因为这条线return (stream << log4cplus::helpers::towstring(str)); log4cplus 试图将每个字符串转换为宽字符吗?我只是在猜测:p 我希望能找到像这样的调音
  • 好的。更改缓冲区大小可将时间减少到 120 秒。这样好一点。
  • @RezaPlusPlus:你在哪里看到那条线?文件stringhelper.cxx?仅当您使用 UNICODE 构建并输出纯字符字符串时,该行才有效。如果您使用 UNICODE 构建的 log4cplus 和您的应用程序,请使用 L"text" 字符串文字或将字符串文字包装到 _T()(在 Windows 上)或 LOG4CPLUS_TEXT()
猜你喜欢
  • 2012-02-13
  • 2010-11-28
  • 2013-02-17
  • 1970-01-01
  • 2013-05-07
  • 2010-12-27
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多