本文共 2053 字,大约阅读时间需要 6 分钟。
1、QLoggingCategory简介
在QtCreator源码中新学到一个类QLoggingCategory。
QLoggingCategory可以控制打印输出类别和区域。方便在调试时,过滤掉不关心的打印信息。2、使用方法
声明
在头文件中声明,供其它文件使用
#includeQ_DECLARE_LOGGING_CATEGORY(logAa)
创建:
使用宏Q_LOGGING_CATEGORY创建
Q_LOGGING_CATEGORY(logAa, "logA.loga")
过滤输出
在main函数中设置过滤,指定哪些日志需要输出,哪些不需要:
QLoggingCategory::setFilterRules(QLatin1String("logA.loga.debug=false"));
使用
qCDebug(logAa) << "Cannot open file";
类似还有qCCritical、qCInfo、qCWarning等
3、宏定义的源码
#define Q_DECLARE_LOGGING_CATEGORY(name) \ extern const QLoggingCategory &name(); #define Q_LOGGING_CATEGORY(name, ...) \ const QLoggingCategory &name() \ { \ static const QLoggingCategory category(__VA_ARGS__); \ return category; \ }
4、setFilterRules函数过滤规则说明
设计名字时建议用这种规则:程序.模块.子模块
注册四个log:Q_LOGGING_CATEGORY(logAa, "logA.loga") Q_LOGGING_CATEGORY(logAb, "logA.logb") Q_LOGGING_CATEGORY(logBa, "logB.loga") Q_LOGGING_CATEGORY(logBb, "logB.logb")
试验方法:
//关闭logAa debug输出 QLoggingCategory::setFilterRules(QLatin1String("logA.loga.debug=false")); //关闭logBb info输出 QLoggingCategory::setFilterRules(QLatin1String("logB.logb.info=false")); //关闭log*b waring输出 QLoggingCategory::setFilterRules(QLatin1String("*.logb.warning=false")); //关闭logAa 所有输出 QLoggingCategory::setFilterRules(QLatin1String("logA.loga*=false")); //关闭logA 所有输出 QLoggingCategory::setFilterRules(QLatin1String("logA*=false")); //关闭logAa debug 和 info 输出 QLoggingCategory::setFilterRules(QLatin1String("logA.loga.debug=false\n" "logA.loga.info=false")); //只打开logAa debug输出 QLoggingCategory::setFilterRules(QLatin1String("*=false\nlogA.loga.debug=true"));
5、其它方法设置规则及优先级
共有五种方法设置日志过滤规则,如下优先级依次递增:
A) [QLibraryInfo::DataPath]/qtlogging.ini
B)QtProject/qtlogging.ini:在/home/zet/.config/QtProject创建qtlogging.ini文件 C)setFilterRules() D)QT_LOGGING_CONF :环境变量,指定日志过滤规则的文件,可以是相对路径或绝对路径:export QT_LOGGING_CONF=/test/qt/LoggingCategory/logconfig.ini E)QT_LOGGING_RULES:环境变量,可以设置多个规则用逗号分割:QT_LOGGING_RULES="*.debug=false;logA.loga.debug=false"日志过滤规则文件 格式如下:
[Rules] *.debug=false logA.loga.debug=true
转载地址:http://cghmi.baihongyu.com/