Qt调试详细日志文件输出

news/2024/12/1 0:43:27/

qInstallMessageHandle安装消息,注册回调函数,对qDebug()、qWarning()、qCritial()、qInfo()、qFatal() 等函数输出信息重定向处理。

注明:以下方法仅适用于 Qt5 及以上版本

目的:生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。那么在qt createor的应用程序输出窗口就不会有调试信息显示。

QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)

qInstallMessageHandler安装写在main()方法中,这样全局所有类的qDebug都可以将信息直接打印到日志文件中即安装了消息处理)。如果想恢复消息处理程序,调用qInstallMessageHandler(0)。

QtMessageHandler 回调函数处理日志信息,包括等级、所在文件、所在行号、描述信息、产生时间并保存到本地文件。

其中等级:

qDebug: 调试信息

qWarning:警告信息

qCritical: 严重错误

qFatal: 致命错误

#ifndef LOGGINGOUTPUT_H
#define LOGGINGOUTPUT_H#include <QObject>
#include <QApplication>
#include <QDir>
#include <QMutex>
#include <QDateTime>
#include <QTextStream>
#include <QFile>const int LOG_OPERATE_OK = 100; //操作成功
const int LOG_OPENFILE_FAILED = 101; //打开文件失败class QLogOutput : public QObject
{Q_OBJECT
public:explicit QLogOutput(QObject *parent = nullptr);//安装信息处理函数static void install(QString strLogFile);//卸载信息处理函数static void uninstall();private://日志信息处理函数static void outPutMsg(QtMsgType msgType, const QMessageLogContext &context, const QString &strText);//保存日志static int SaveLog(const QString &strMsg);//保存日志路径static QString m_strLogFile;};#endif // LOGGINGOUTPUT_H
#include "loggingoutput.h"QString  QLogOutput::m_strLogFile = "";QLogOutput::QLogOutput(QObject *parent) : QObject(parent)
{}void QLogOutput::outPutMsg(QtMsgType msgType, const QMessageLogContext &context, const QString &strText)
{static QMutex mutex;mutex.lock();QByteArray localMsg = strText.toLocal8Bit();QString strMsg("");QString strMessage;// 设置输出信息格式QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");switch(msgType){case QtDebugMsg:{strMsg = QString("Debug:");strMessage = QString("[%1] %5 %6\t--File:%2  Line:%3  Function:%4  ").arg(strDateTime).arg(context.file).arg(context.line).arg(context.function).arg(strMsg).arg(strText);}break;case QtInfoMsg:{strMsg = QString("Info:");strMessage = QString("[%1] %2 %3\t").arg(strDateTime).arg(strMsg).arg(strText);}break;case QtWarningMsg:{strMsg = QString("Warning:");strMessage = QString("[%1] %5 %6\t--File:%2  Line:%3  Function:%4  ").arg(strDateTime).arg(context.file).arg(context.line).arg(context.function).arg(strMsg).arg(strText);}break;case QtCriticalMsg:{strMsg = QString("Critical:");strMessage = QString("[%1] %5 %6\t--File:%2  Line:%3  Function:%4  ").arg(strDateTime).arg(context.file).arg(context.line).arg(context.function).arg(strMsg).arg(strText);}break;case QtFatalMsg:{strMsg = QString("Fatal:");strMessage = QString("[%1] %5 %6\t--File:%2  Line:%3  Function:%4  ").arg(strDateTime).arg(context.file).arg(context.line).arg(context.function).arg(strMsg).arg(strText);}break;}SaveLog(strMessage);// 解锁mutex.unlock();}void QLogOutput::install(QString strLogFile)
{qInstallMessageHandler(outPutMsg);QString log_dir = strLogFile+"/log";QDir dir(log_dir);if(!dir.exists()){//创建在可执行程序所在目录创建log文件dir.mkdir(log_dir);}m_strLogFile = log_dir;
}void QLogOutput::uninstall()
{qInstallMessageHandler(0);
}int QLogOutput::SaveLog(const QString& strMsg)
{QString log_fileName;QDateTime current_date_time =QDateTime::currentDateTime();QString date = current_date_time.toString("yyyy-MM-dd");log_fileName = m_strLogFile +"/"+"log_"+date+".txt";// 输出信息至文件中(读写、追加形式)QFile file(log_fileName);bool bOpen = file.open(QIODevice::ReadWrite | QIODevice::Append);if(!bOpen)return  LOG_OPENFILE_FAILED;QTextStream stream(&file);stream << strMsg << "\r\n";file.flush();file.close();return  LOG_OPERATE_OK;
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);QString strLogFile = QCoreApplication::applicationDirPath();QLogOutput::install(strLogFile);qDebug("This is a 调试 message.");qInfo("This is a info message.");Dialog w;w.show();return a.exec();
}

在vs2017 msvc + qt 的环境下,防止中文乱码,在pro文件配置

msvc{
QMAKE_CXXFLAGS += -utf-8
}


http://www.ppmy.cn/news/470423.html

相关文章

Unity核心4——SpriteShape

Sprite Shape 是精灵形状的意思&#xff0c;它主要是方便我们以节约美术资源为前提&#xff0c;制作 2D 游戏场景地形或者背景的 ​ 在 Window --> Package Manager 中搜索 2D&#xff0c;选择 2D Sprite Shape&#xff0c;导入项目 一、Sprite Shape Profile 精灵形状概述文…

C51/C52--led流水灯、静态数码管

目录 一、led流水灯&#xff08;flowing water lamp&#xff09; 二、静态数码管 一、led流水灯&#xff08;flowing water lamp&#xff09; 我们在点亮一个led灯的基础上&#xff0c;对8个led灯按照某种特定的点亮规律进行操作&#xff0c;从而形成像水按顺序流动的效果。 …

【Android开发基础】手机传感器信息的获取

文章目录 一、引言二、了解1、概述2、关键 三、设计1、UI设计&#xff08;1&#xff09;主界面&#xff08;2&#xff09;适配器item 2、编码&#xff08;1&#xff09;获取数据&#xff08;传感器信息&#xff09;&#xff08;2&#xff09;渲染数据&#xff08;初始化适配器&…

iPhone13问题多,iPhone12价格贵,苹果用户难抉择

随着iPhone13到达部分用户手里&#xff0c;iPhone13的问题频出&#xff0c;导致部分消费者不喜欢这款新iPhone&#xff0c;转而将目光投向去年的iPhone12&#xff0c;然而让人愕然的是iPhone12价格竟然如此昂贵&#xff0c;导致消费者陷入两难抉择。 今年苹果推出的iPhone13可谓…

王传福称华为手机是比亚迪造的;贝索斯将于7月20日飞往太空;苹果泄露女生私密照赔偿数百万美元 | EA周报...

EA周报 2021年6月11日 每个星期7分钟&#xff0c;元宝带你喝一杯IT人的浓缩咖啡&#xff0c;了解天下事、掌握IT核心技术。 周报看点 1、王传福称华为手机是比亚迪造的&#xff1a;华为手机 90% 金属框比亚迪造 2、亚马逊允许员工每周远程工作两天 3、消息称小米组建团队重新杀…

uniapp使用uni.createInnerAudioContext()实现在app 小程序 h5有声书的播放

实现读书软件的听书功能&#xff0c;适配app&#xff0c;小程序&#xff0c;h5 实现效果展示功能带你包括&#xff1a; 章节&#xff0c;倒计时&#xff0c;上一章&#xff0c;下一章&#xff0c;播放&#xff0c;暂停&#xff0c;倍速&#xff1a; uniapp官方uni.createInner…

苹果的福利被“羊毛党”薅废了

本文转载自IT之家 AppleCare 是果粉们都很熟悉的一项付费服务&#xff0c;你去逛 Apple Store 时店员不一定会推销 iPhone&#xff0c;但买单时大概率会被安利一波 AppleCare。 AppleCare 说白了就是意外险&#xff0c;一旦苹果设备出现碎屏、浸液、开不了机等问题&#xf…

小米手机超越苹果,成欧洲第二;马斯克特斯拉内部邮件:痛恨开会,少讲黑话;Spring 6.0 发布|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…