qt 格式化打印 日志 QMessagePattern 格式词法语法及设置

 一、qt源码格式化日志 关键内部类 QMessagePattern 

qt为 格式化打印日志 提供了一个简易的 pattern(模式/格式) 词法解析的简易的内部类QMessagePattern,作用是获取和解析自定义的日志格式信息。
该类在qt的专门精心日志操作的源码文件Src\qtbase\src\corelib\global\qlogging.cpp 中定义

该类在构造函数中可以直接从 环境变量 QT_MESSAGE_PATTERN 中获取写有 pattern(格式/模式) 信息的字符串(qt现有的pattern的词法比较简易),然后通过setPattern()进行词法解析,得到自定义pattern的格式信息。
也可以通过qSetMessagePattern(const QString &pattern)对static的QMessagePattern对象进行设置。下面是qSetMessagePattern()的源码。可以看到如果是从环境变量值设置了pattern是无法进行修改的。

//D:\Qt\Qt5.12.0\5.12.0\Src\qtbase\src\corelib\global\qlogging.cpp

.......
//通过下面这个宏,定义了一个static 的QMessagePattern对象,并通过qMessagePattern()函数返回。
//用函数形式来调用 可以达到第一次调用即初始化的目的
Q_GLOBAL_STATIC(QMessagePattern, qMessagePattern) 
..........

//对static的QMessagePattern对象设置新的pattern。如果原来的pattern是从环境变量中获取的,
//则无法设置。
void qSetMessagePattern(const QString &pattern)         
{
    QMutexLocker lock(&QMessagePattern::mutex);

    if (!qMessagePattern()->fromEnvironment)
        qMessagePattern()->setPattern(pattern);
}

对这个简易的词法解析源码有兴趣,可以到qlogging.cpp中查阅。

 简单案例

#include <QDebug>

int main(int argc, char *argv[])
{
   QString pattern="%{file}:%{function}:%{line}:%{message}";
   qSetMessagePattern(pattern); //设置输出信息的格式

   qDebug()<<"test"<<endl;
   ret
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值