一、方法一
#include <QCoreApplication>
#include <QMutex>
#include <QFile>
#include <QDateTime>
#include <QTextStream>
#include <loghandle.h>
#include <QDebug>
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("QFile:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
QString current_dateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QString current_data = QString("(%1)").arg(current_dateTime);
QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_data);
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();
}
void space_line(){
// qDebug() << "===========================";
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qInstallMessageHandler(outputMessage);
atexit(space_line);
qDebug() << "hello qt!";
return a.exec();
}
方法二、
以类的形式。
.h文件
#ifndef LOGHANDLE_H
#define LOGHANDLE_H
#include <QObject>
#include <QMutex>
#include <QTextStream>
#include <QFile>
#include <QDateTime>
#include <QTimer>
#include <QDir>
static QMutex mutex;
class LogHandle :public QObject
{
Q_OBJECT
public:
LogHandle();
~LogHandle();
void checkLogFilesSize(); // 检查日志文件的大小
private slots:
void autoDeleteLog(); // 自动删除日志
private:
QTimer *timer = nullptr;
};
#endif // LOGHANDLE_H
.cpp文件
#include "loghandle.h"
#include <QDebug>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
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("QFile:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
QString current_dateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QString current_data = QString("(%1)").arg(current_dateTime);
QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_data);
QFile file("today.txt");
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream text_stream(&file);
text_stream << message << "\r\n";
file.flush();
file.close();
mutex.unlock();
}
LogHandle::LogHandle()
{
qInstallMessageHandler(myMessageOutput);
timer = new QTimer;
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(autoDeleteLog()));
timer->start(5000);
}
LogHandle::~LogHandle()
{
}
void LogHandle::autoDeleteLog()
{
// QDateTime now = QDateTime::currentDateTime();
// QDateTime time1 = now.addDays(-30);
// QDateTime time2;
// QDir dir("taday.txt");
// QFileInfoList fileList = dir.entryInfoList();
// foreach (QFileInfo f, fileList ) {
// // "."和".."跳过
// if (f.baseName() == "")
// continue;
// time2 = QDateTime::fromString(f.baseName(), "yyyy-MM-dd");
// if (time2 < time1) { // 只要日志时间小于前30天的时间就删除
// dir.remove(f.absoluteFilePath());
// }
// }
}
void LogHandle::checkLogFilesSize()
{
qDebug() << "wadakjfaskd";
}
.main文件
#include <QCoreApplication>
#include <QMutex>
#include <QFile>
#include <QDateTime>
#include <QTextStream>
#include <loghandle.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
LogHandle log;
qDebug() << "hello qt!";
log.checkLogFilesSize();
return a.exec();
}