Qt之qSetMessagePattern

简述

改变默认的消息处理输出。

允许改变qDebug()、qWarning()、qCritical()、qFatal()的输出。

占位符

支持以下占位符:

占位符描述
%{appname}QCoreApplication::applicationName()
%{category}日志类别
%{file}原文件路径
%{function}函数
%{line}源文件所在行
%{message}实际的消息
%{pid}QCoreApplication::applicationPid()
%{threadid}当前线程的系统范围ID(如果它可以获得)
%{type}“debug”、”warning”、”critical”或”fatal”
%{time process}“debug”、”warning”、”critical”或”fatal”
%{time boot}消息的时间,启动进程的秒数
%{time [format]}消息产生时,系统时间被格式化通过把格式传递至QDateTime::toString()。如果没有指定的格式,使用Qt::ISODate。
%{backtrace [depth=N] [separator=”…”]}很多平台不支持,暂略…

还可以使用条件类型,%{if-debug}, %{if-info} %{if-warning}, %{if-critical} 或 %{if-fatal}后面跟着一个%{endif}。如果类型匹配,%{if-*} 和 %{endif}之间的内容会被打印。

最后,如果类别不是默认的一个,%{if-category} ... %{endif}之间的内容将被打印。

例如:

QT_MESSAGE_PATTERN="[%{time yyyyMMdd h:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}"

默认的模式是:”%{if-category}%{category}: %{endif}%{message}”。

也可以在运行时改变模式,通过设置QT_MESSAGE_PATTERN环境变量。如果既调用了 qSetMessagePattern()又设置了环境变量QT_MESSAGE_PATTERN,那么,环境变量优先。

示例

qSetMessagePattern

下面,我们使用上面讲解的占位符,来改变缺省消息处理程序的输出。

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    // 改变缺省消息处理程序的输出
    qSetMessagePattern("Message:%{message} File:%{file} Line:%{line} Function:%{function} DateTime:%{time [yyyy-MM-dd hh:mm:ss ddd]}");

    // 打印信息
    qDebug("This is a debug message.");
    qInfo("This is a info message.");
    qWarning("This is a warning message.");
    qCritical("This is a critical message.");
    qFatal("This is a fatal message.");

    ...
    return app.exec();
}
  • 输出如下:

Message:This is a debug message. File:..\MessagePattern\main.cpp Line:138 Function:main DateTime:[2016-07-06 15:21:40 周三] 
Message:This is a info message. File:..\MessagePattern\main.cpp Line:139 Function:main DateTime:[2016-07-06 15:21:40 周三] 
Message:This is a warning message. File:..\MessagePattern\main.cpp Line:140 Function:main DateTime:[2016-07-06 15:21:40 周三] 
Message:This is a critical message. File:..\MessagePattern\main.cpp Line:141 Function:main DateTime:[2016-07-06 15:21:40 周三] 
Message:This is a fatal message. File:..\MessagePattern\main.cpp Line:142 Function:main DateTime:[2016-07-06 15:21:40 周三]

QT_MESSAGE_PATTERN环境变量

选择:项目 -> 构建环境,添加环境变量:

QT_MESSAGE_PATTERN = [%{type}] %{appname} (%{file}:%{line}) - %{message}
  • 1
int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    // 改变缺省消息处理程序的输出
    qSetMessagePattern("Message:%{message} File:%{file} Line:%{line} Function:%{function} DateTime:%{time [yyyy-MM-dd hh:mm:ss ddd]}");

    // 打印信息
    qDebug("This is a debug message.");
    qInfo("This is a info message.");
    qWarning("This is a warning message.");
    qCritical("This is a critical message.");
    qFatal("This is a fatal message.");

    ...
    return app.exec();
}
  • 输出如下:

[debug] MessagePattern (..\MessagePattern\main.cpp:138) - This is a debug message. 
[info] MessagePattern (..\MessagePattern\main.cpp:139) - This is a info message. 
[warning] MessagePattern (..\MessagePattern\main.cpp:140) - This is a warning message. 
[critical] MessagePattern (..\MessagePattern\main.cpp:141) - This is a critical message. 
[fatal] MessagePattern (..\MessagePattern\main.cpp:142) - This is a fatal message.

如上所述,这时即使我们使用了qSetMessagePattern也无济于事,因为,环境变量优先。


阅读更多
个人分类: Qt
想对作者说点什么? 我来说一句

QT 例程 HTTP 下载 HTTP qt网络

2009年01月04日 1KB 下载

qt example

2009年02月03日 475KB 下载

Qt培训Qt培训.ppt

2011年03月14日 291KB 下载

24小时学通qt 编程

2009年03月20日 19.25MB 下载

qt程序设计《中文》

2008年08月26日 6.57MB 下载

Qt简介Qt简介Qt简介Qt简介

2010年12月25日 1.43MB 下载

java QT详解大全

2010年05月23日 2.03MB 下载

没有更多推荐了,返回首页

不良信息举报

Qt之qSetMessagePattern

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭