Qt
的动态库通过源码可以可以看到含有大量的qCInfo
和 qCDebug
等大量的日志, 但是我们正常运行Qt
程序,这些动态库或插件里面的日志是不会输出到我们的控制台里面的。
所以本章主要记录怎么输出这些日志出来。
一: 步骤
主要使用的是Qt的 函数 QLoggingCategory::setFilterRules()
, 它可以设置各个日志模块的打印等级。
我们可以在main()
函数的第一行这样设置.
代表任何模块的任何等级日志都会输出出来。
#include <QLoggingCategory>
int main(int argc, char *argv[])
{
QLoggingCategory::setFilterRules(""
"*.debug=false\n"
"*.critical=true\n"
"*.warning=true\n"
"*.info=true\n"
"");
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
我们查看控制台就可以发现Qt
内容的日志可以查看了,方便追踪问题。
二: 过滤指定模块
有时候发现某些日志比较多,影响阅读了,可以过滤掉对应模块的日志。
比如 过滤上面日志中 Paint ended. Back buffer valid region is now QRegion(0,0 800x600)
这个模块的日志。
我们通过源码搜索可以发现:
这个日志对应的category
的方法为: lcQpaBackingStore
在搜索 lcQpaBackingStore
对应注册的 字符串的名字,就代表这个模块名字。我们现在指定过滤这个模块。
过滤代码为:
在上面正则后面追加指定模块的格式。
记得每行结尾的\n
不能漏了, 不然不会生效。
#include <QLoggingCategory>
int main(int argc, char *argv[])
{
QLoggingCategory::setFilterRules(""
"*.debug=false\n"
"*.critical=true\n"
"*.warning=true\n"
"*.info=true\n"
"qt.qpa.backingstore.debug=false\n"
"qt.qpa.backingstore.info=false\n"
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
具体格式可以参考Qt官方说明:https://doc.qt.io/qt-6/qloggingcategory.html#configuring-categories