文章主要内容转自: https://blog.csdn.net/liang19890820/article/details/51839233
和 https://cloud.tencent.com/developer/article/1625081
qt运行程序时log太多的话,一些重要信息可能会错过,因此对log分级很有必要,一般情况下,常见的log分级有fatal,critical,error,debug,warning,info。
现在公司有个项目就有log分级的要求,经过查询,发现使用qSetMessagePattern的方法就能对log进行分级。
该方法的官方文档介绍见链接qSetMessagePattern
中文介绍见链接中文介绍
占位符
支持以下占位符:
占位符 | 描述 |
---|---|
%{appname} | 应用名字 |
%{category} | 日志类别 |
%{file} | 原文件路径 |
%{function} | 函数 |
%{line} | 源文件所在行 |
%{message} | 实际的消息 |
%{pid} | 应用进程号 |
%{threadid} | 线程ID |
%{type} | 显示当前的log是什么级别 |
%{time process} | “debug”、”warning”、”critical”或”fatal” |
%{time boot} | 消息的时间,启动进程的秒数 |
%{time [format]} | 消息产生时,系统时间被格式化通过把格式传递至QDateTime::toString()。如果没有指定的格式,使用Qt::ISODate |
还可以使用条件类型,%{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