QT日志系統


今天給大家介紹下QT里面的日志系統,直接上代碼

 1 #include <QApplication>
 2 #include <iostream>
 3 #include "ThorHardwareUtil/PLC/plc.h"
 4 #include "ThorHardwareUtil/crc.h"
 5 #include "ThorHardwareUtil/Warehouse/baseshelf.h"
 6 #include <QDebug>
 7 #include "opendoorthread.h"
 8 #include "TestProject/testform.h"
 9 #include <QtMessageHandler>
10 #include <QFile>
11 #include <QDir>
12 #include <ThorUtil/confighelper.h>
13 #include <thread>
14 using namespace std;
15 //寫入信息到文件
16 void WriteLog(QString str, QString LogType)
17 {
18 
19     QString fileFolder= qApp->applicationDirPath()+"/log/"+QDateTime::currentDateTime().toString("yyyy-MM-dd");
20     QDir dir(fileFolder);
21     if(!dir.exists())
22     {
23         dir.mkpath(fileFolder);
24     }
25     QString filePath=QString("%1/%2.log").arg(fileFolder).arg(LogType);
26     QString strToWrite="日志產生時間:"+QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
27     strToWrite.append(QString("\r\n日志消息:%1").arg(str));
28     strToWrite.append("\r\n---------------------------------------------------------------------");
29     QFile file(filePath);
30     file.open(QIODevice::WriteOnly | QIODevice::Append);
31     QTextStream text_stream(&file);
32     text_stream <<strToWrite<<"\r\n";
33     file.flush();
34     file.close();
35     //打印到控制台
36     std::cout << strToWrite.toLocal8Bit().constData() << std::endl;
37 }
38 //注冊函數
39 void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
40 {
41     QString txtMessage = "";
42     QString messageType = "";
43     switch (type)    {
44     case QtDebugMsg:    //調試信息提示
45         messageType = "Debug";
46         txtMessage = QString("Debug: %1 (%2:%3, %4)\n").arg(msg).arg(context.file).arg(QString::number(context.line)).arg(context.function);
47         break;
48     case QtInfoMsg:
49         messageType = "Info";
50         txtMessage = QString("Warning: %1 (%2:%3, %4)\n").arg(msg).arg(context.file).arg(QString::number(context.line)).arg(context.function);
51         break;
52     case QtWarningMsg:    //一般的warning提示
53         messageType = "Waring";
54         txtMessage = QString("Warning: %1 (%2:%3, %4)\n").arg(msg).arg(context.file).arg(QString::number(context.line)).arg(context.function);
55         break;
56     case QtCriticalMsg:    //嚴重錯誤提示
57         messageType = "Critical";
58         txtMessage = QString("Critical: %1 (%2:%3, %4)\n").arg(msg).arg(context.file).arg(QString::number(context.line)).arg(context.function);
59         PostErrorMessage(txtMessage,messageType);
60         break;
61     case QtFatalMsg:    //致命錯誤提示
62         messageType = "Fatal";
63         txtMessage = QString("Fatal: %1 (%2:%3, %4)\n").arg(msg).arg(context.file).arg(QString::number(context.line)).arg(context.function);
64         abort();
65     }
66     WriteLog(txtMessage, messageType);
67 }
68 int main(int argc, char *argv[])
69 {
70     QApplication a(argc, argv);
71     //注冊監聽級別函數
72     qInstallMessageHandler(myMessageOutput);
73     
74      qDebug() << "debug";
75 
76 
77     return a.exec();
78 }

這樣大家使用qDebug,qInfo,qCritical等打印信息就會分類輸出到日志文件里面,方便查看

注意:release模式下無法打印QMessageLogContext的具體內容,因為qt默認把release給取消了,需要在pro文件里面加上DEFINES += QT_MESSAGELOGCONTEXT


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM