首页 > 其他分享 >Qt输出打印信息的日志到文件(两种方式)

Qt输出打印信息的日志到文件(两种方式)

时间:2022-10-31 19:31:08浏览次数:65  
标签:case Qt text break QString context arg 日志 打印信息


效果:

Qt输出打印信息的日志到文件(两种方式)_ios

 

1、利用ofstream文件写操作,将内存数据写入存储文件。

找到main.cpp:

①、增加头文件引用:

#include <QDateTime>
#include <QDebug>
#include <fstream> // std::ofstream

②、增加全局变量:

std::ofstream g_OutputDebug;

③、定义函数:

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 加锁
static QMutex mutex;
mutex.lock();
QString text;
switch(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;
default:
text = QString("Debug: ");
}

QString context_info = QString("F:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件信息L行数
QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
QString current_date = QString("(%1)").arg(current_date_time);
std::string message = qPrintable(QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(current_date).arg(msg));
g_OutputDebug << message << "\r\n"; // std::ofstream
// 解锁
mutex.unlock();
}

④、增加注册信息及记录到文件中:

int main(int argc, char *argv[])
{
//注册MessageHandler
qInstallMessageHandler(outputMessage); //注册MessageHandler
g_OutputDebug.open(qPrintable(QString(QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-log.txt")))), std::ios::out | std::ios::trunc);

QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

 

2、利用QFile记录文件

①、增加头文件引用:

#include <QDateTime>
#include <QDebug>

#include <QFile>

②、定义函数:

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 加锁
static QMutex mutex;
mutex.lock();
QByteArray localMsg = msg.toLocal8Bit();
QString text;
switch(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;
default:
text = QString("Debug: ");
}

// 设置输出信息格式
QString context_info = QString("F2:(%1) L:(%2)").arg(QString(context.file)).arg(context.line); // F文件L行数
QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
QString strMessage = QString("%1 %2 \t%3 \t%4").arg(text).arg(context_info).arg(strDateTime).arg(msg);
// 输出信息至文件中(读写、追加形式)
QFile file(CODE_SYSTEM_BACKER_PATH+QString(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss").append("-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[])
{
//注册MessageHandler
qInstallMessageHandler(outputMessage); //注册MessageHandler

QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

 

这样,我们就得到了输出日志了。(注:Release版本稍许有些不同,需要引用DEFINES += QT_MESSAGELOGCONTEXT到Pro中)

标签:case,Qt,text,break,QString,context,arg,日志,打印信息
From: https://blog.51cto.com/u_15854865/5810960

相关文章

  • 云原生架构下的日志收集模式
     日志作为一种特殊的数据,对处理历史数据、诊断问题以及了解系统活动等有着非常重要的作用。数据分析人员、开发人员和运维人员都需要对日志进行分析。在云原生架构下,Kube......
  • 云原生架构下的日志收集模式​
    日志作为一种特殊的数据,对处理历史数据、诊断问题以及了解系统活动等有着非常重要的作用。数据分析人员、开发人员和运维人员都需要对日志进行分析。在云原生架构下,Kubernet......
  • Qt on Android 开发之 C++与Java 交互
    目录​​简述​​​​Qt引入Android模块​​​​Java示例​​​​Cpp与java交互​​简述我做了一个小例子,来实现了C++与Java之间的交互。该示例是以整形和字符型举例说明,......
  • QT之自制Slider
    需求: 1.绘制一个滑动条,在其上方绘制三角形, 2.当鼠标进入(移动)到三角形区域时显示对应的标注值 3.鼠标双击时三角形时,滑块移动到该位置 4.鼠标单击滑块槽时,......
  • Qt设置运行时动态库路径的几点说明
    Qt设置运行时动态库路径的几点说明Qt教程 2022-04-1601:00随着需求的不断增加,程序不断变大,用到的动态库也越来越多,到了发布程序的时候你会发现和可执行文件同一目录下......
  • 排障最后一公里,“融合”型的日志平台应该如何建设?
    企业建设统一日志平台的需求背景随着业务的发展,IT系统逐渐呈现海量化和异构化的趋势。日志管理与分析在信息记录、操作审计、问题排查等场景中有重要的管理价值。现如今各中......
  • java tomcat按天生成日志
    tomcat按天生成日志,亲测可行~1.安装cronolog安装方式一:shell>sudoyuminstallcronolog或shell>sudoapt-getinstallcronolog验证cronolog:shell>whichcronol......
  • linuxdeployqt QT打包
    一、环境硬件平台:英伟达Xavier系统版本:Ubuntu18.04.3LTSQt版本:Qt5.9.5二、步骤1、下载linuxdeployqt源码:下载地址:Releases·probonopd/linuxdeployqt·GitH......
  • [BUUCTF]第八天训练日志
    文章目录​​[RoarCTF2019]EasyJava​​​​[BUUCTF2018]OnlineTool​​​​[GYCTF2020]Blacklist​​​​[MRCTF2020]你传你......
  • [BUUCTF]第六天训练日志
    文章目录​​[SUCTF2019]EasyWeb​​​​[HFCTF2020]EasyLogin​​​​[CISCN2019华北赛区Day2Web1]HackWorld​​[SUCTF2019]EasyWeb做了一半做不动了,换个时间来,花费......