【Linux Qt】QString无输出,QT日志系统无输出

在Linux系统使用qInstallMessageHandler注册自定义日志输出时,出现了无日志生成,日志内容为空的情况。由于日志系统其实就是输出的QString输出的内容,所以认为是QString输出的问题。
在终端输入 export -p | grep QT
在打印中可以看到一项:QT_LOGGING_RULES=“*.debug=false”
说明系统的环境变量的设置导致qt无输出

对于此无输出的状况,有两种解决方式:
1.终端执行时,先修改环境变量

export QT_LOGGING_RULES="*.debug=true ; qt.*.debug=false"

【qt.**.debug=false】用于屏蔽其他不属于此程序内的输出
不过由于是终端中export的,所以仅在当前终端中有效
2.若使用QTCreator直接运行程序,也可以点击左侧栏项目—》run—》environment修改环境变量QT_LOGGING_RULES="*.debug=true ; qt.*.debug=false"*
好像也可以通过代码中设置:QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);来允许输出,但是可能优先级不如环境变量高,所以设置后没有效果。若无环境变量的情况下可以使用

在通过设置环境变量来使得QString与日志都有输出后,还出现了一个问题。日志中出现了大量的不属于程序内主动输出的内容。

解决方式:
通过Qt日志系统的自定义过滤,限定只有此程序内的输出被打印与记录

通过设置自定义的QCDebug,然后屏蔽其他输出,仅允许自定义的输出
首先设置一个自定义的QCDebug

//在头文件中
Q_DECLARE_LOGGING_CATEGORY(testOut)
//在一个源文件中
Q_LOGGING_CATEGORY(testOut, "test.out")

将所有QDebug输出的地方全部换成QCDebug(testOut)

 qCDebug(testOut) << "hello world " ;

最后再设置过滤规则(代码中添加):

 QLoggingCategory::setFilterRules("*.debug=false\n"
                                 "test.out.debug=true");

不过上面这个优先级较低,所以还是设置环境变量:

QT_LOGGING_RULES="*.debug=false;test.out.debug=true"

最后,日志中打印的就都是使用QCDebug(testOut)输出的内容了

过滤规则设置的优先级顺序如下:

[QLibraryInfo::DataPath]/qtlogging.ini
QtProject/qtlogging.ini
setFilterRules()
QT_LOGGING_CONF
QT_LOGGING_RULES

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值