不使用第三方库,直接使用Qt实现日志打印,demo下载
#include "QtLog.h"
#include <QtWidgets/QApplication>
#include <QMutex>
#include <QFile>
#include <QDir>
#include <QDateTime>
#include <QCoreApplication>
#include <QApplication>
#define LOG_MAX_SIZE 5*1024*1024
#define LOG_DIR_NAME "mylog"
QString getLogPath()
{
return QString("./%1").arg(LOG_DIR_NAME);
}
QString getLogFileName()
{
return QString("%1/log%2.txt").arg(LOG_DIR_NAME).arg(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
}
void myMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
// 加锁
static QMutex mutex;
mutex.lock();
QByteArray localMsg = msg.toUtf8();
QString strMsg("");
switch (type)
{
case QtDebugMsg:
strMsg = QString("Debug");
break;
case QtWarningMsg:
strMsg = QString("Warning");
break;
case QtCriticalMsg:
strMsg = QString("Critical");
break;
case QtFatalMsg:
strMsg = QString("Fatal");
break;
case QtInfoMsg:
strMsg = QString("Info");
break;
default:
return;
}
// 设置输出信息格式
QString strDateTime = QDateTime::currentDateTime().toString("yy-MM-dd hh:mm:ss");
QString strMessage = QString("%1 [%2] [%3:%4] %5")
.arg(strDateTime)
.arg(strMsg)
.arg(context.file)
.arg(context.line)
.arg(localMsg.constData());
// 输出信息至文件中(读写、追加形式)
// 使用 static 只需要
static QFile file(getLogFileName());
if (!file.isOpen()) {
file.open(QIODevice::ReadWrite | QIODevice::Append);
}
if (file.size() > LOG_MAX_SIZE)
{
file.close();
file.setFileName(getLogFileName());
file.open(QIODevice::ReadWrite | QIODevice::Append);
}
QTextStream stream(&file);
stream << strMessage << "\r\n";
file.flush();
// 取消 close
// file.close();
// 解锁
mutex.unlock();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//日志
QDir dir;
if (!dir.exists(getLogPath()))
{
dir.mkdir(getLogPath());
}
qInstallMessageHandler(myMessageOutput);
qDebug() << "test debug log";
qInfo() << "test info log";
qWarning() << "test warning log";
qCritical() << "test critical log";
QtLog w;
w.show();
return a.exec();
}
标签:case,Qt,打印,strMsg,QString,file,arg,日志,include
From: https://blog.csdn.net/YIRILIANG/article/details/142925007