我正在研究性能至关重要的多线程应用程序。我查看了rlog,Ace和Boost日志记录。我选择rlog是因为我读到它是最快的(禁用日志记录后,其开销最少)。
我的问题是即使在发布模式下,它也会显示文件名,行号等。如果您可以告诉我如何关闭该信息,则可能会解决我的问题。在任何情况下,对于我来说,最有效的C ++记录器是什么?
我正在研究性能至关重要的多线程应用程序。我查看了rlog,Ace和Boost日志记录。我选择rlog是因为我读到它是最快的(禁用日志记录后,其开销最少)。
我的问题是即使在发布模式下,它也会显示文件名,行号等。如果您可以告诉我如何关闭该信息,则可能会解决我的问题。在任何情况下,对于我来说,最有效的C ++记录器是什么?
Answers:
不幸的是,目前我无法投反对票。据我所知,永远不要使用像Apache log4cxx这样的废话。它包含严重的错误。
我认为您应该继续努力。
我在http://logging.apache.org/log4cxx/index.html上使用log4cxx取得了成功。它是流行的Log4j记录器的C ++版本,可通过conf文件或代码轻松配置。禁用时的开销很小(方法调用和整数比较)。
输出到日志的模式由转换模式定义,该转换模式可以与日期/时间和消息一样简单。它还处理文件大小限制,翻转等。您还可以为各种错误和来源配置不同的模式。
这是关闭rlog提供的额外信息(如文件名,行号等)的方法。在main()
函数中(或任何地方)初始化rlog时,可以执行以下操作:
rlog::RLogInit(argc, argv);
rlog::StdioNode slog (2, rlog::StdioNode::OutputColor);
slog.subscribeTo( RLOG_CHANNEL("error") );
的第二个参数StdioNode
是用于控制输出的标志。检查rlog文档(可以用Doxygen生成)以获取所有可能的标志列表。此处示例中的一个使rlog仅根据严重性为输出着色,而未添加任何其他信息。
您可能希望考虑使用徽标系统。logog恰好提供了这种功能,但没有Pantheios具有的隐式代码依赖性。logog是线程安全的,它可以随时控制在什么类型的消息上进行记录。
我是logog的作者和维护者,所以我的看法有点偏颇。但是在实现这一功能之前,我确实检查了rlog,Pantheios和其他日志记录系统。
一些开销可能发生在您的宏/流中。您需要非常小心,不要在禁用日志记录时编写正在记录的字符串。
与宏一样,巧妙地使用流和?:运算符可以使您做到这一点。
尝试使用c-log库https://github.com/0xmalloc/c-log,这是一种针对C / C ++语言的快速,稳定且线程安全的日志库。
#include <pthread.h>
...)