需求
qt 如何把 log 输出到文件
解决
log 输出功能
log_qt.h
#ifndef LOG_QT_H
#define LOG_QT_H
#include <QString>
void LogOutputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg);
#endif // LOG_QT_H
log_qt.cpp
#include "log/log_qt.h"
#include <QString>
#include <QMutex>
#include <QDateTime>
#include <QFile>
void LogOutputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 加锁
static QMutex mutex;
mutex.lock();
QString tag;
switch(type)
{
case QtDebugMsg:
tag = QString("Debug:");
break;
case QtWarningMsg:
tag = QString("Warning:");
break;
case QtCriticalMsg:
tag = QString("Critical:");
break;
case QtFatalMsg:
tag = 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);
// QByteArray localMsg = msg.toLocal8Bit();
QString date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
// QString message = QString("[%1] [%2] [File: %3] [Function: %4] [Line: %5] : %6")
// .arg(date_time).arg(context.file).arg(context.function).arg(context.line).arg(strMsg).arg(localMsg.constData());
// QString message = QString("[%1] [%2] [File: %3] [Function: %4] [Line: %5] : %6").arg(date_time, tag, context.file, context.function, context.line, msg);
QString message = QString("[ %1 ] [%2] [File: %3 ] [Function: %4 ] [Line: %5 ] : %6 ").
arg(date_time).arg(tag).arg(context.file).arg(context.function).arg(context.line).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();
}
调用
#include "mainwindow.h"
#include <QApplication>
#include "log/log_qt.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//注册日志函数
qInstallMessageHandler(LogOutputMessage);
qDebug("This is a debug message");
MainWindow w;
w.show();
return a.exec();
}