背景:
开发工作中,工程往往有很多模块,每个模块的打印也是秘密麻麻,每次定位问题,如何过滤掉其他模块的日志,或者如何给日志设置种类?或者当你想跟踪Qt的源码,如何打开Qt源码中的输出呢?Qt早就给你了很便利的工具,今天我们就来学习下这个 QLoggingCategory
QLoggingCategory:
QLoggingCategory表示运行时由字符串标识的特定日志记录类别。可以将类别配置为启用或禁用每种消息类型的消息日志记录。
要检查消息类型是否已启用,请使用以下方法之一:isDebugEnabled()、IsInfo enabled()、isWarningEnabled()和isCriticalEnabled()。
QLoggingCategory可以控制打印输出类别和模块。方便在调试时,过滤掉不关心的打印信息
如何在自己的代码模块中使用?
1 添加头文件
#include <QLoggingCategory>
2 使用宏 Q_LOGGING_CATEGORY(lCustomLog, “CustomLog”)
Q_DECLARE_LOGGING_CATEGORY(lCustomLog)
Q_DECLARE_LOGGING_CATEGORY是声明,声明后,lCustomlog 可在其他模块中使用
Q_LOGGING_CATEGORY(testLog,"test.requests")
Q_LOGGING_CATEGORY(lCustomLog, "CustomLog")
其中Q_LOGGING_CATEGORY为宏定义
3 设置过滤规则
QLoggingCategory::setFilterRules("CustomLog.*.debug=false");
如上则,CustomLog的debug打印不输出;
4 通过qCDebug、qCWarning、qCInfo、qCCritical输出
qCDebug(lCustomLog) << "this is a log !";
qCWarning(lCustomLog) << "this is other" << lCustomLog().categoryName();
其他控制方式:
环境变量
QT_LOGGING_CONF :环境变量,指定日志过滤规则的文件,可以是相对路径或绝对路径:
`export QT_LOGGING_CONF=./LoggingCategory/logconfig.ini`
QT_LOGGING_RULES :环境变量,可以设置多个规则用逗号分割:
QT_LOGGING_RULES="*.debug=false;logA.loga.debug=false"
QT_LOGGING_RULES="*.debug=false;driver.usb.debug=true"
默认的Qt 日志配置文件为 qtlogging.ini
打开某个特定模块的日志输出,可追加
比如
qt.qpa.input.tablet=true