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

发布于:2024-04-25 ⋅ 阅读:(24) ⋅ 点赞:(0)

目标:实现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