zoukankan      html  css  js  c++  java
  • 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:..MessagePatternmain.cpp Line:138 Function:main DateTime:[2016-07-06 15:21:40 周三]
    Message:This is a info message. File:..MessagePatternmain.cpp Line:139 Function:main DateTime:[2016-07-06 15:21:40 周三]
    Message:This is a warning message. File:..MessagePatternmain.cpp Line:140 Function:main DateTime:[2016-07-06 15:21:40 周三]
    Message:This is a critical message. File:..MessagePatternmain.cpp Line:141 Function:main DateTime:[2016-07-06 15:21:40 周三]
    Message:This is a fatal message. File:..MessagePatternmain.cpp Line:142 Function:main DateTime:[2016-07-06 15:21:40 周三]

    QT_MESSAGE_PATTERN环境变量

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

    QT_MESSAGE_PATTERN = [%{type}] %{appname} (%{file}:%{line}) - %{message}
    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 (..MessagePatternmain.cpp:138) - This is a debug message.
    [info] MessagePattern (..MessagePatternmain.cpp:139) - This is a info message.
    [warning] MessagePattern (..MessagePatternmain.cpp:140) - This is a warning message.
    [critical] MessagePattern (..MessagePatternmain.cpp:141) - This is a critical message.
    [fatal] MessagePattern (..MessagePatternmain.cpp:142) - This is a fatal message.

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

  • 相关阅读:
    angular4升级angular5问题记录之this.location.back()
    angular4升级angular5问题记录之No NgModule metadata found for 'AppModule'
    Angular4图片上传预览路径不安全问题
    Angular4.0引入laydate.js日期插件方法
    Angular4.0用命令行创建组件服务出错
    IE10以下的img标签问题
    关于for循环删除数组内容出现的问题
    关于onmouseover和onmouseout的bug
    纯lua实现Base64加密与解密
    SciTE如何修改背景色
  • 原文地址:https://www.cnblogs.com/new0801/p/6146591.html
Copyright © 2011-2022 走看看