当前位置:  开发笔记 > 编程语言 > 正文

什么是最有效的线程安全C++记录器?

如何解决《什么是最有效的线程安全C++记录器?》经验,为你挑选了5个好方法。

我正在开发一个性能关键的多线程应用程序.我查看了rlog,Ace和Boost日志记录.我之所以选择rlog是因为我认为它是最快的(当禁用日志记录时,它的开销最小).

我遇到的问题是它显示文件名,行号等,即使在发布模式下也是如此.如果你能告诉我如何关闭这些信息,我的问题可能会得到解决.在任何情况下,对于我的情况,C++中最有效的记录器是什么?



1> kirsche40..:

不幸的是,我目前无法投票.据我所知,从来没有像Apache log4cxx那样使用垃圾.它包含严重的错误.

    0.9分支的最后一个版本是0.9.7并且仍然包含内存泄漏,因为每个具有虚拟成员的类都没有虚拟dtor.

    最新版本0.10.x从0.9.x中丢失了许多功能,并且不向后兼容.你被迫重写了很多你自己的代码.

    整个项目似乎没有得到维护.0.11.xx的发布已经公布了2年.

在我看来,你应该加强.


"每个有虚拟成员的班级都没有虚拟dtor",他们不相信,必须检查它.非常令人失望的Apache.
你现在可以downvote :)
>>"每个有虚拟成员的班级都没有虚拟的dtor"虽然这不是很好,但并不意味着它会导致问题.如果类被动态而不是静态类型删除,那么这只是一个问题.仅此一项本身并不是一个问题,并不意味着任何记忆泄露.

2> dcw..:

Pantheios被认为是性能最佳的C++日志库,并声称是唯一100%类型安全的文件库(请参阅此文章,了解相关库解释为什么基于printf()/ iostream的库不是类型的 -安全)


即使他们不喜欢Pantheios,您链接的页面上的"竞争对手"列表也会提供信息.

3> 小智..:

我在http://logging.apache.org/log4cxx/index.html上使用log4cxx取得了成功.它是流行的Log4j记录器的C++版本,可以通过conf文件或代码轻松配置.禁用它时的开销很小(方法调用和整数比较).

输出到日志的模式由转换模式定义,转换模式可以像日期/时间和消息一样简单.它还处理文件大小限制,翻转等.您还可以为各种错误和来源配置不同的模式.



4> johnwbyrd..:

您可能希望考虑logog系统.logog提供了这种功能,但它没有Pantheios所具有的隐式代码依赖性.logog是线程安全的,它允许对任何点上记录的消息类型进行高度控制.

我是logog的作者和维护者,所以我的观点有点偏颇.但在实施这个之前,我确实审查了rlog,Pantheios和其他日志系统.

https://github.com/johnwbyrd/logog.



5> cassava..:

以下是关闭rlog提供的额外信息(如文件名,行号等)的方法.当您在main()函数(或任何)中初始化rlog时,您可能会执行以下操作:

rlog::RLogInit(argc, argv);
rlog::StdioNode slog (2, rlog::StdioNode::OutputColor);
slog.subscribeTo( RLOG_CHANNEL("error") );

第二个参数StdioNode是用于控制输出的标志.检查rlog文档(可以使用Doxygen生成)以获取可能的标志列表.此处示例中的一个使rlog仅根据严重性为输出着色,而不添加任何其他信息.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有