Qt qInstallMessageHandler 安装消息句柄实现简单日志功能

Qt 之 qInstallMessageHandler 输出详细日志并保存到文件中 一般情况下,一个大型项目会出现很多这样类似的调试信息,很不利于查找,因为我们根本不清楚输出信息所在的文件、函数、行号等信息。下面,我们来根据需要自定义消息处理程序。// 自定义消息处理程序break;break;break;break;break;// 安装消息处理程序// 打印信息这时,我们不仅可以输出调试信息,而且可以很直观、很方便的得到输出代码所在的文件、函数、行号等信息。当软件发布的时候,通常都会采用日志输出功能,方便我们后期的跟踪、查找问题。 阅读详情

0. 前言

自带的日志, 还是很好用的, 支持四种输出, 代码量很少, 一个函数

1. 实现效果

日志记录的很详细, 有消息内容, 文件路径, 代码行数, 函数, 日期

可以说很全面了, 相比较log4qt略显臃肿, 这个就轻便很多

 

2. 目录结构

只有main函数

3. 源码编译

main.cpp

#include <QCoreApplication>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QtMsgHandler>
#include <QtDebug>
#include <QMutex>
#include <QDateTime>
#include <stdio.h>
#include <stdlib.h>

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    // 加锁
    static QMutex mutex;
    mutex.lock();

    QByteArray localMsg = msg.toLocal8Bit();

    QString strMsg("");
    switch(type)
    {
    case QtDebugMsg:
        strMsg = QString("Debug:");
        break;
    case QtWarningMsg:
        strMsg = QString("Warning:");
        break;
    case QtCriticalMsg:
        strMsg = QString("Critical:");
        break;
    case QtFatalMsg:
        strMsg = QString("Fatal:");
        break;
    case QtInfoMsg:
        strMsg = QString("Info:");
        break;
    }

    // 设置输出信息格式
    QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    QString strMessage = QString("\n[%5] %1 \nFile: %2  \nLine: %3  \nFunction: %4")
            .arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function).arg(strDateTime);

    // 输出信息至文件中(读写、追加形式)
    QFile file("log.txt");
    file.open(QIODevice::ReadWrite | QIODevice::Append);
    QTextStream stream(&file);
    stream << strMessage << "\r\n";
    file.flush();
    file.close();

    // 解锁
    mutex.unlock();
}

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

    QCoreApplication a(argc, argv);

    qDebug("This is a debug message");
    qWarning("This is a warning message");
    qCritical("This is a critical message");
//    qFatal("This is a fatal message");
    qInfo("This is a info message");

    return a.exec();
}

 

qInstallMessageHandler输出重定向实现日志功能 介绍 Qt提供了一系列消息模板:qInfo、qDebug、qWarning、qCritical、qFatal,官方文档 qDebug可能比较常用,他们分别表示消息、调试信息、一般警告、严重错误、致命错误,默认情况会输出至调试窗口。而在release模式下可以将其输出重定向至文件,从而实现日志功能。 qInstallMessageHandler 使用此方法可以将上述五种消息重定向至指... 阅读详情

相关推荐

Qt开发之路60---Qt日志重定向之输出Log至文件或UI控件上

软件里面的打印信息,通过日志记录到文件或者输出到控件上,方便查看。Qt有Debug、Warning、Info、Critical、Fatal五种级别的调试信息。Qt4提供了qInstallMsgHandler函数 Qt5提供了qInstallMessageHandler函数 对qDebug、qWarning、qCritical、qFatal等函数输出信息的重定向处理。...

木木木 的博客 5672

Qt qInstallMessageHandler详解

`qInstallMessageHandler`用于安装自定义的消息处理程序,返回指向上一个消息处理程序的指针 (**此函数在Qt 5.0中被引入**): - 函数原型:QtMessageHandler qInstallMessageHandler(QtMessageHandler handler) 这个函数允许码农完全控制Qt库中产生的警告、错误等消息的输出,改变Qt库的默认行为,对于调试应用程序,或者记录应用程序的运行过程非常有用。

做减求空 4716

qt之qInstallMessageHandler重定向日志qInfo

qInfo()获取qDebug()打印的时候无法打印代码行号以及函数名,文件名怎么办? 通过可以通过钩子将打印日志进行重定向这样就能直接使用qInfo()打印有文件、行数、行数名的日志。

啊渊的专栏 2641

Qt之qInstallMessageHandler(重定向至文件)

简述 在Qt之qInstallMessageHandler(输出详细日志)一节中,我们讲解了如何使用自定义消息处理程序输出调试信息,而且可以很直观、很方便的得到输出代码所在的文件、函数、行号等信息。 当软件发布的时候,通常都会采用日志输出功能,方便我们后期的跟踪、查找问题。 简述 自定义消息处理 效果 源码 更多参考 ...

weixin_34406086的博客 1041

TMS320F280049C 学习笔记11 控制率加速器 CLA 例程

总结了TI官方在C2000Ware_3_01_00_00版本中提供的7个与CLA相关的例程。

whyorwhnt的专栏 1万+

STM32读取BQ40Z50的数据

TI电池管理芯片BQ40Z50,通信协议是SMBUS,类似IIC,速率要求10-100KHz   用的STM32F103的硬件IIC读取电池的各种数值,源代码如下: ​ #include "iic.h" #include "stdio.h"  //***************************************************** // IIC2初始化函数:初始化ST...

百步登峰的博客 1万+

Qt里面该怎么用日志(一、qInstallMessageHandler的使用)

一、qInstallMessageHandler 1.1 说明 在软件开发维护过程中,日志是不可缺少的一部分,优秀的日志可以帮我们迅速的定位问题的所在 这篇文章我们来谈谈QT中日志的使用 QT中可以直接使用qInstallMessageHandler来重定义qdebug、qinfo这些消息类型,这样子就很方便于我们的代码的编写了,debug和release时,我们还可以做不同的区分等 首先来看一下官方说明 嗯,很长的一段英文,我们来把它翻译一下(有道出马一波) 1.2 官方样例 #include &

LyRics1996的博客 1837

别再死记硬背HJB方程了!用Python数值求解一个简单最优控制问题(附完整代码)

本文通过Python数值求解Hamilton-Jacobi-Bellman(HJB)方程,帮助读者从工程实践角度理解最优控制问题。教程涵盖从建立简单车辆控制模型到离散化HJB方程、实现值迭代算法及可视化结果的完整流程,适合具备Python基础的开发者学习。

weixin_42520796的博客 371

Qt巧用qInstallMessageHandler实现日志输出,简单方便高效。无需引用第三方日志库。

#include "StdAfx.h" #include <QTextCodec> #include <QMutex> #include <QMutexLocker> void VMSMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &m...

ylyanleiyl的专栏 518

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 665

activemq_CVE-2015-5254_漏洞复现_源码分析

ActiveMQ-CVE-2015-5254

qq_51550750的博客 939

Qt 之 qInstallMessageHandler(输出详细日志)

安装之前已定义的消息处理程序,返回一个指向前一个消息处理程序。

青春不老,奋斗不止! 4万+

【CVPR 2025】清华:注意力状态空间模块,Mamba与注意力的超强组合,即插即用!

MambaIRv2提出了一种创新的图像恢复模型,通过引入注意力状态空间模块(ASSM)解决了Mamba模型因果建模限制问题。该模型结合语义引导邻域机制和注意力状态空间方程,实现了非因果建模,有效缓解了长距离衰减问题。实验表明,MambaIRv2在图像超分辨率、JPEG压缩伪影减少和图像去噪等任务中表现优异,参数更少但性能超越现有方法。

qq_43303160的博客 3039

Qt安装消息处理qInstallMessageHandler输出详细日志

安装前面定义的Qt消息处理程序。返回指向上一个消息处理程序的指针。消息处理程序是一个输出调试消息、警告、关键和致命错误消息的函数。Qt库(调试模式)包含数百条警告消息,当内部错误(通常是无效的函数参数)发生时,这些警告消息将被打印出来。在发布模式下构建的Qt也包含这样的警告,除非在编译期间设置了QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT。如果实现自己的消息处理程序,则可以完全控制这些消息。默认消息处理程序将消息打印到X11下的标准输出或Windows下的调试器。

林夕07 1313

Ultralytics 框架中 model.predict() 返回的 results 对象的详细解析

通过掌握 results 对象的使用方法,您可以快速实现模型部署、数据分析与可视化。

浩瀚之水的专栏 747

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

qt初入门9:qt记录日志的方式,日志库了解练习(qInstallMessageHandler,qslog, log4qt)

初次接触qt相关的日志库,有需要用一个qt的日志库,就瞎折腾。最终发现,好像最基本的是最合理的,直接用log4qt在cpp中LOG4QT_DECLARE_STATIC_LOGGER静态定义最方便吧,结合配置文件也能满足需求。最终感觉,直接用log4qt应该完全能满足需求,日志文件中也能定制自己需要的布局,也支持多线程等。啥也不是,先操作后再思考吧。

yun6853992的博客 3794

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Qt日志重定向qInstallMessageHandler,输出Log至文件及网络

Qt有Debug、Warning、Info、Critical、Fatal五种级别的调试信息。 qDebug:调试信息 qWarning:警告信息 qInfo:警告信息 qCritical:严重错误 qFatal:致命错误 Qt4提供了qInstallMsgHandler(Qt5:qInstallMessageHandler)对qDebug、qWarning、qCritical、qFatal等函数...

$firecat利白的代码足迹$ 3885

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Qt之qInstallMessageHandler(输出详细日志)

简述 安装之前已定义的消息处理程序,返回一个指向前一个消息处理程序。 消息处理程序是一个函数,用于打印调试信息、警告信息、严重错误和致命的错误的消息。Qt库(debug模式)包含成百上千的警告信息打印,当发生内部错误时(通常是无效的函数参数)。Qt在release模式下构建还包含这些警告,除非在编译时设置QT_NO_WARNING_...

weixin_34306593的博客 1962

Qt实现记录日志文件log

概述 Qt有两种实现记录日志的方式,第一种是安装自定义的Qt消息处理程序,自动输出程序产生的调试消息、警告、关键和致命错误消息的函数;第二种是自定义一个类,可以在程序指定位置打印输出指定的内容。 第一种qInstallMessageHandler方式 自定义消息处理函数,然后安装该函数,注意此时QDebug的消息将会输出在日志文件,Qt程序调式时不再打印。 main.cpp #include "widget.h" #include <QApplication> #include <QMut

weixin_40355471的博客 1万+

Qt日志系统实战:从qInstallMessageHandler到生产级日志管理

在C++和Qt开发中,日志系统是程序可观测性的核心基础设施,它通过捕获、格式化和持久化运行时信息,为调试、监控和问题排查提供关键依据。其核心原理在于拦截和处理应用程序的输出流,通常涉及消息捕获、格式化、输出和管理等模块。一个健壮的日志系统不仅能提升开发调试效率,还能在生产环境中提供稳定的运行状态追踪能力,尤其适用于桌面应用、嵌入式系统和长期维护的中大型项目。本文聚焦于Qt框架下的日志系统实现,通过自定义消息处理器(qInstallMessageHandler)这一关键技术,深入探讨如何构建一个支持线程安全、

weixin_33806914的博客 330

Qt::Qt Log日志模块

Qt Log日志模块 简介 这几天在交接工作,把之前手头的一个项目交接一下,想着增加一个日志模块,去查了一下,Qt自带的日志模块 qInstallMessageHandler 。 qInstallMessageHandler–说明 qInstallMessageHandler 位于<QtGlobal> - Global Qt Declarations下边,属于全局函数。 官方解释 Qt...

u011218356的博客 1万+

QT笔记——qInstallMessageHandler消息日志

QT笔记—— 日志输出

lion_cxq的博客 727

Qt日志重定向(将qDebug信息输出到界面控件)

Qt日志重定向 程序日志对于输出程序运行信息有着非常重要的作用,它可以帮助程序员定位问题所在,输出程序运转状态等 在使用QtCreator编写程序时,我们可以使用qDebug方便的将自己需要的信息输出,但是如果想将其显示到程序的控件上,又该怎样做呢? 经过一番搜索,我找到了将qDebug重定向的方法,可以将其输出的信息自由的存放到ui控件或文件中(搜到的大部分教程都是将日志信息重定向到文件中,容易让人误以为它只能重定向到文件) qInstallMessageHandler 由于本人开发环境为Qt5,因此本文

Wanggj的博客 1万+

Qt日志功能实战:如何用qInstallMessageHandler自定义日志输出(含完整代码示例)

本文深入探讨了如何利用Qt的qInstallMessageHandler函数,将基础的qDebug、qWarning等日志输出升级为可定制、企业级的日志系统。通过完整的代码示例,详细讲解了从线程安全的文件日志记录到支持分级控制、文件滚动的高级日志管理器设计,帮助开发者构建稳定高效的Qt应用日志架构。

nn3456的博客 548
上一篇: Qt Log4qt实现的日志记录
下一篇: Qt c实现自定义日志
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值