如何输出 QT 源码中的日志?

QT的应用程序在运行过程中,自己程序的日志,我们是可以控制并打印输出的,那么当我们想定位到源码中,查看某些错误输出或者执行顺序时,这时候就需要打开qt源码的日志开关了。

 一、对于qt本身的模块

我们查看qt的源码,看其日志输出使用的是:qCDebug,qCWarning,qCInfo,qCCritical,

 

 

那么怎么打开QT的源码中累似qCDebug输出呢?

我们了解到,qt本身有一套完整的日志框架 ----> QLoggingCategory 

QLoggingCategory可以控制打印输出类别和模块。方便在调试时,过滤掉不关心的打印信息。

以qCDebug做说明:

我们打开qt,windows的源码,看qwindowstablesupport类(此类是关于windows下手写板的触控类)

 

 

 

看到qCDebug得第一个参数 lcQpaTablet,我们找到其对应的声明,发现它代表了一个模块名:

 

 

 

我们知道了qCDebug打印日志,是分模块打印输出的,对应各自的模块,那么怎么打开这个模块对应的日志输出呢?

我们通过查看QLoggingCategory类的说明,发现有五种方法设置日志过滤规则及优先级:

如果我们使用qt默认的配置,关于过滤配置文件的路径,通过代码查看,可知qt读取默认的配置路径为:%AppData%\Local/QtProje

 

1. 通过注册的方法

 

 

 2.  QtProject/qtlogging.ini:在%AppData%\Local/QtProject创建qtlogging.ini文件 

 

3.  QLoggingSettingsParser 设置过滤规则

 

 

 

4. QT_LOGGING_CONF :环境变量,指定日志过滤规则的文件,可以是相对路径或绝对路径:export QT_LOGGING_CONF=./LoggingCategory/logconfig.ini

5. QT_LOGGING_RULES :环境变量,可以设置多个规则用逗号分割:QT_LOGGING_RULES="*.debug=false;logA.loga.debug=false"

 

日志文件的过滤规则说明:

 

 

 

 

 通过以上的方法,我们设置了打开 Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet") 模块的日志

运行程序查看,qt中源码 QWindowsTabletSupport类中的 qCDebug 日志都已经成功打印:

 

 

二、对于自定义的模块

 

我们在自己定义的模块中使用QLoggingCategory

1.声明头文件:#include <QLoggingCategory>

2.创建:使用宏 Q_LOGGING_CATEGORY(lCustomLog, "CustomLog")

3.设置过滤规则:QLoggingCategory::setFilterRules(QLatin1String("lCustomLog.debug=false"));

4.使用:通过qCDebug输出  qCDebug(lCustomLog) << "this is a log !";

 

posted @ 2020-03-10 17:11  无敌柴刀  阅读(3737)  评论(0编辑  收藏  举报