QT:qInstallMessageHandler打印日志重定向

这篇具有很好参考价值的文章主要介绍了QT:qInstallMessageHandler打印日志重定向。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、qInstallMessageHandler含义

2、实例:

3、调试级别Q包含用于警告和调试文本的全局宏:

4、打印日志,如何使用


1、qInstallMessageHandler含义

(1)此函数在使用Qt消息处理程序之前已定义。返回一个指向前一个消息处理程序。

(2)消息处理程序是一个函数,用于打印qDebug,qWarning,qCritical和qFatal的错误消息。Qt库(调试模块)包含成百上千的警告信息,打印时(通常是无效的函数参数)发生内部错误。Qt构建在release模式下还包含一些除了QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT之外的警告已经设置在编译。如果你实现自己的消息处理程序,需要完全控制这些消息。

(3)在X11或Windows下的调试器,缺省的消息处理程序向标准输出打印消息。如果这是一个致命的消息,应用程序立即中止。

(4)只有一个消息处理程序可以被定义,因为这通常是在应用程序的基础上完成控制调试输出。

(5)恢复消息处理程序,调用qInstallMessageHandler(0)。

2、实例:

static QMutex g_qmutex; // 互斥锁
QString g_LogDirPath = "/log/";

void outputMessage(QtMsgType type, const QMessageLogContext& Context, const QString &data )
{
    if(g_qmutex.tryLock(10)==false)
    {
        return;
    }

    QString msg(data);
    QString text;

    switch(static_cast<int>(type))
    {
        case QtDebugMsg:
            text = QString("Debug:");
            break;
        case QtWarningMsg:
            text = QString("Warning:");
            break;
        case QtCriticalMsg:
            text = QString("Critical:");
            break;
        case QtFatalMsg:
            text = QString("Fatal:");
            break;
    }

    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
    QString current_date = QString("[%1]").arg(current_date_time);
    QString message = QString("%1 %2 %3").arg(current_date).arg(text).arg(msg);

    QString file_time = QDate::currentDate().toString("yyyyMMdd");
    QString file_name1  = QString(g_LogDirPath+"LogTWSDNetPay%1.log").arg(file_time);

    QFile file(file_name1);
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&file);
    text_stream << message << "\r\n";
    file.flush();
    file.close();
    g_qmutex.unlock();

    (void)Context;
}

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
    MainWindow::instance();


    qInstallMessageHandler(outputMessage);


    return a.exec();
}
3、调试级别
Q包含用于警告和调试文本的全局宏:

qDebug()
调试消息

qInfo()
信息消息

qWarning()
警告消息和可恢复的错误

qCritical()
关键错误和系统错误

qFatal()
致命错误

如果包含头文件<QDebug>,就可以将所述qDebug()宏用作一个输出流。

4、打印日志,如何使用
qDebug() << __LINE__ << __FUNCTION__ << "删除日志:" << rmFileName;

自动就会把当前要输出的日志内容,写到重定向的文件里面。文章来源地址https://www.toymoban.com/news/detail-613400.html

到了这里,关于QT:qInstallMessageHandler打印日志重定向的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(49)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(76)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月15日
    浏览(66)
  • 【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 我要使用的功能比较简单,主要包含扫描串口、打开串口、发送数据、接收数据、暂停按钮、停止按钮,因此接下里将围绕这几个功能依次更新。 我的工程项目名字叫 “GUI”。

    2024年02月11日
    浏览(68)
  • QT 驱动条码打印机(没有验证过)

    这里的打印机是条码打印机,因为第一次接触这种设备,所以买了斑马的GK888t型条码打印机,据说ZPL语言就是斑马的杰作想必支持会好点。实际是,除了ZPL本身外,没有SDK,也没有DDK,所以,一切就只能靠搜索引擎帮忙了,这里感谢百度和谷歌啦。 粗略总结了6种方法,个人

    2024年02月13日
    浏览(47)
  • 【Visual Studio】报错 C2653,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在添加 Widget 做

    2024年02月11日
    浏览(51)
  • QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决

    操作系统:Windows10专业版 QT版本:QT5.15.2 QtCreator版本:9.0.2 MSVC版本:MSVC 2019 64bit C/C++编译器:Microsoft Visual C++ Compiler 17.1.32328.378(amd64) 调试器:Auto-detected CDB at C:Program FilesWindows Kits10Debuggersx64cdb.exe 文件编码的设置都是采用的默认值UTF-8,如下图: 当qt的项目采用MSVC构建套

    2024年02月14日
    浏览(51)
  • qt-C++笔记之打印所有发生的事件

    code review! 在Qt C++中,若要打印所有发生的事件,您可以通过重写 QObject 的 event 函数或者 QApplication 的 notify 函数来实现。这两个方法都可以截获事件循环中的事件,但是通常更推荐使用 notify 方法,因为它可以捕获到传递给任何对象的所有事件。 使用 QApplication 的 notify 方法

    2024年02月20日
    浏览(37)
  • 11 | Qt的日志

    Qt QT消息分为以下几种 Constant Value Description QtDebugMsg 0 qDebug() function QtInfoMsg 4 qInfo() function QtWarningMsg 1 qWarning() function QtCriticalMsg 2 qCritical() function QtFatalMsg 3 qFatal() function QtSystemMsg QtSystemMsg

    2024年02月02日
    浏览(24)
  • Qt调试详细日志文件输出

    qInstallMessageHandle 安装消息,注册 回调函数 ,对qDebug()、 qWarning()、qCritial()、qInfo()、qFatal()  等函数输出信息重定向处理。 注明 :以下方法仅适用于 Qt5 及以上版本 。 目的 :生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等)

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包