你使用什么日志设施?Qt?
你选择qDebug(),qWarning(),qCritical(),qFatal()方法,还是像Log4cpp(Log4cplus等),或者某些自定义代码?
答案 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是着名的log4j到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