如何让QML LoggingCategory日志在控制台正常输出?
如何让QML的LoggingCategory日志在控制台生效?
你遇到的问题核心是LoggingCategory的日志级别和console调用方法不匹配,同时还要注意C++端的全局日志过滤配置可能会覆盖QML的设置,以下是具体解决方案:
1. 日志级别与console方法的对应规则
只有当console调用的方法级别大于等于LoggingCategory设置的defaultLogLevel时,日志才会输出,具体对应关系如下:
LoggingCategory.Debug:允许所有console方法输出(log/info/warn/error/debug)LoggingCategory.Info:允许info/warn/error输出LoggingCategory.Warning:只允许warn/error输出LoggingCategory.Critical:仅允许error输出
比如你原代码中defaultLogLevel设为Warning,但用了console.log(对应Debug级别),级别低于Warning,所以日志被过滤无法显示。
2. 修正后的示例代码
可以通过两种方式调整:要么改用对应级别的console方法,要么降低LoggingCategory的级别:
import QtQuick 2.12 import QtQuick.Window 2.12 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") Item { LoggingCategory { id: category name: "com.qt.category" defaultLogLevel: LoggingCategory.Warning } Component.onCompleted: { console.log("default message") // 改用warn方法,匹配Warning级别 console.warn(category, "category message"); // 或者修改defaultLogLevel为Debug,用console.log也能输出 // console.log(category, "category message"); } } }
3. 检查C++端的全局日志过滤配置
QML日志输出会被C代码中QLoggingCategory的全局过滤规则影响,比如如果C端设置了如下规则:
QLoggingCategory::setFilterRules( QStringLiteral("*.info=false\n" "*.debug=false\n"));
所有info和debug级别的日志都会被屏蔽,即使QML里设置了对应级别也无法输出。需要调整过滤规则允许目标类别的日志,比如:
QLoggingCategory::setFilterRules( QStringLiteral("com.qt.category.debug=true\n" "com.qt.category.warning=true\n"));
内容的提问来源于stack exchange,提问作者user2366975
相关产品推荐
相关产品推荐

