笔记:Qt开发之定制化qDebug()函数

发布时间 2023-12-12 18:29:42作者: 布丁Plus
目标:实现qDebug()函数的定制输出,包含文件名、函数名、行数等信息

1,通过qSetMessagePattern函数,实现定制化输出
int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    // 改变缺省消息处理程序的输出,信息:线程:功能函数(行数):时间
    qSetMessagePattern("%{message} :id=%{threadid} %{function}(%{line}):%{time [hh:mm:ss zzz]}");

    // 打印信息
    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();
}
输出信息
This is a debug message. :id=815 main(217):[11:37:24 843]
This is a info message. :id=815 main(218):[11:37:24 843]
This is a warning message. :id=815 main(219):[11:37:24 844]
This is a critical message. :id=815 main(220):[11:37:24 844]
占位符         描述
%{appname}     应用名字
%{file}        源文件路径
%{function}    函数
%{line}        源文件所在行
%{message}     实际的消息
%{pid}         应用进程号
%{threadid}    线程ID
%{type}        日志类型(如Debug、Warning、Critical等)
%{time}当前时间戳
%{time boot}   系统启动后到当前时刻经过的时间
可以使用条件类型,
%{if-debug}, %{if-info} ,%{if-warning}, %{if-critical} 或 %{if-fatal}后面跟着一个%{endif}。
如果类型匹配,%{if-*} 和 %{endif}之间的内容会被打印。

注意:qSetMessagePattern函数只会影响使用Qt的日志系统,
如QDebug、qInfo、qWarning和qCritical等函数输出的日志消息。

2,Release 版本默认不包含文件名、函数名、行数等信息,
需在.pro项目文件加入以下代码,然后重构项目:
DEFINES += QT_MESSAGELOGCONTEXT

3,在.pro文件定义以下的宏,可以屏蔽相应的日志输出
DEFINES += QT_NO_WARNING_OUTPUT
DEFINES += QT_NO_DEBUG_OUTPUT
DEFINES += QT_NO_INFO_OUTPUT