Qt输出打印信息的日志到文件(两种方式)
2023-09-14 09:07:01 时间
效果:
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中)
相关文章
- QT实现简单的上位机软件
- VS2019 Qt开发环境搭建与配置
- Qt-自定义可编辑模型
- 嵌入式Qt-表格使用测试
- 启用已废弃或过时的Qt方法
- Qt开源网络库[8]-上传文件与超时处理
- 在Linux上使用Qt开发应用(qtonlinux)
- 使用Qt快速设置Linux时间(qt设置linux时间)
- Linux安装Qt:一步一步指南(linux安装qt)
- Qt QListWidget和QToolButton用法详解(实例分析)
- Linux下Qt环境快速安装指南(linux下qt安装)
- 在Linux上体验Qt的魅力(linux下运行qt)
- 在 Linux 上快速搭建 Qt 运行环境(qt运行环境linux)
- Linux编译Qt:一步一步教程(linux编译qt)
- 开启 linux 下强大的图形界面Qt(linuxqt图形界面)
- 解决Qt连接MySQL的问题(qt连接不上mysql)
- Qt 5.6在Linux上的应用(qt5.6linux)
- 如何在Linux系统中安装QT软件?简明指南分享(qtlinux安装)
- 从 Qt 中编译到 MySQL 的进程(qt mysql 编译)
- 从Qt到MySQL:搭建一个有效的链接(qtmysql链接)
- MySQL和QT不配套使用,无法实现事务处理(mysql不支持qt事务)
- ubuntulinux下使用Qt连接MySQL数据库的方法