Qt生成log日志文件

摘要:

本文在Qt程序中实现了日志功能,读者可以在此基础上进一步创作和拓展

介绍:

系统日志一般指存放系统重要运行信息的log.txt文件,主要作用有两个:1.记录系统重要的运行信息 2.当系统突然崩溃时,可以根据日志来跟踪和定位程序错误。
Qt 提供 qInstallMessageHandler(Qt5)或者qInstallMsgHandler(Qt4),可以对QDebug、QWarning、QError等进行重定向等处理。

qDebug 调试信息
qWarning 警告信息
qCritical 严重错误
qFatal 致命错误

实现过程

#include <QApplication>
#include <QtDebug>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QDateTime>
#include <QMutex>
#include <QString>
#include <qapplication.h>
#include <QMessageBox>

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:break;
     }

     // 设置输出信息格式
     QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
     QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
     QString current_date = QString("(%1)").arg(current_date_time);
    // QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
     QString message = QString("%1 %2").arg(current_date).arg(msg);
     // 输出信息至文件中(读写、追加形式)
     QFile file("log.txt");
     file.open(QIODevice::WriteOnly | QIODevice::Append);
     QTextStream text_stream(&file);
     text_stream << message << "\r\n";
     file.flush();
     file.close();
     // 解锁
     mutex.unlock();
 }

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //注册日志函数
    qInstallMessageHandler(outputMessage); 
    //记录日志信息
    qDebug("This is a debug message");
    qWarning("This is a warming message");
    qCritical("This is a critical message");
    //qFatal("This is a fatal message");
    return a.exec();
}

运行结果:

可以在的build-**_Qt_5_11_2_MSVC201_**bit-****文件下找到log.txt文件
在这里插入图片描述

拓展:

在上面的介绍中,我们在main函数前定义了一个outputMessage,这种方式在复杂的程序中很不美观,一种比较好的方式是将其打包进log库中,这样的话只需要#include “log.h”就行了。另外,很多博文将其封装进了log类中,也值得借鉴。
https://blog.csdn.net/bootleader/article/details/70213281?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

发布了22 篇原创文章 · 获赞 2 · 访问量 1157

猜你喜欢

转载自blog.csdn.net/qinqinxiansheng/article/details/105037044