伐木设施和Qt

时间:2009-10-09 09:31:53

标签: c++ qt logging

你使用什么日志设施?Qt?

你选择qDebug(),qWarning(),qCritical(),qFatal()方法,还是像Log4cpp(Log4cplus等),或者某些自定义代码?

9 个答案:

答案 0 :(得分:12)

如果您只是在单个线程中工作,qDebug和这样的工作相当不错,或者您可以通过在QT 5.0+中使用qInstallMessageHandler或旧版本中的qInstallMsgHandler安装自己的处理程序来稍微修改它们。

注意:使用qInstallMsgHandler(现已弃用,例如http://doc.qt.io/archives/4.6/qtglobal.html#qDebug)的较旧版本的qDebug()等不是线程安全的。如果你使用线程,它们会崩溃/破坏。在内部,它使用的是QTextStream,它是可重入的,但不是线程安全的。

答案 1 :(得分:10)

现有的C ++日志库对我的口味来说太重了,所以我根据Qt qInstallMsgHandlerq后端Logging in C++的想法创建了一个自定义前端。它是跨平台和线程安全的。总有一天我会清理代码并将其发布给全世界:)

Qt的一个有趣的替代方案是QxtLogger

答案 2 :(得分:10)

由于Qt 5.2支持分类记录:http://qt-project.org/doc/qt-5/qloggingcategory.html。这允许您将日志记录消息拆分为(层次结构)类别,以及记录的微调,以及不记录的情况。

答案 3 :(得分:5)

Log4Qt是着名的log​​4j到Qt世界的端口。

答案 4 :(得分:4)

QDebug是最好的方式,因为它提供了与框架其余部分的开箱即用集成,不会让您依赖第三方代码并涵盖所有日志记录需求。

答案 5 :(得分:3)

我没有使用Qt,但是对于日志记录我正在使用Dr'Dobb的Logging in C++的修改版本。可以找到原始代码here

我的修改特定于Microsoft Windows平台(fopen不允许文件读取共享),可以找到here

答案 6 :(得分:3)

关于答案说“不幸的是qDebug()等不是线程安全的。如果使用线程,它们将崩溃/破坏。在内部它使用QTextStream,它是可重入的,但不是线程安全的。”

我严重怀疑,qDebug旨在同时使用。如果不是,请提交错误。

答案 7 :(得分:1)

取决于您希望如何使用该日志数据。

如果它在运行时用于调试,qWarning()就可以了。

如果需要调试回顾(通常是服务器端代码),普通的旧文本文件是最好的。最好按日编写这些日志文件。

答案 8 :(得分:0)

您可以查看:https://github.com/netresultsit/uniqlogger

  • LGPL
  • 线程安全
  • 多个后端:文件,彩色控制台,网络,rsyslog
  • 按文件大小和数量旋转文件
  • 支持压缩以前的文件 等