【QT】写日志文件
第一步:.h文件代码
#ifndef LOGMANAGE_H
#define LOGMANAGE_H
#include <QObject>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QDebug>
#include <QMutex>
#include "Ulitity_global.h"
class ULITITY_EXPORT LogManage: public QObject
{
Q_OBJECT
public:
/**
* @brief 输出日志
* @param message
*/
static void log(QString message);
private:
LogManage();
~LogManage();
static bool openFile();
static void closeFile();
private:
static QFile file;
static QMutex mutex;
static int MAX_LOGFILE_SIZE;//最大文件 大小;
static QString fileName;
};
#endif // LOGMANAGE_H
第二步:.cpp文件代码
#include "logmanage.h"
LogManage::LogManage()
{
}
LogManage::~LogManage()
{
closeFile();
}
QFile LogManage::file;
QMutex LogManage::mutex;
int LogManage::MAX_LOGFILE_SIZE = 3 * 1024 * 1024;//最大文件 大小;
QString LogManage::fileName = "log.txt";
/**
* @brief 打开文件
* @return
*/
bool LogManage::openFile()
{
try {
if(file.isOpen()) {
return true;
}
file.setFileName(fileName);
if(file.size() > MAX_LOGFILE_SIZE) {
QString current_date_time = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");
QString message = QString("%1%2%3").arg(current_date_time).arg("-").arg(fileName);
file.rename(fileName, message);
}
file.open(QIODevice::WriteOnly | QIODevice::Append);
if(!file.isOpen()) {
qDebug() << "打开日志失败";
return false;
}
return true;
} catch (std::exception ex) {
qCritical() << "打开文件失败:" << ex.what();
}
return false;
}
/**
* @brief 输出日志
* @param msg
*/
void LogManage::log(QString msg)
{
try {
mutex.lock();
if(openFile()) {
// 设置输出信息格式
QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
QString message = QString("[%1] %2").arg(current_date_time).arg(msg);
// 输出信息至文件中(读写、追加形式)
QTextStream text_stream(&file);
text_stream << message << "\r\n";
closeFile();
} else {
qDebug() << "打开日志失败";
}
} catch (std::exception ex) {
closeFile();
qCritical() << "输出日志失败:" << ex.what();
}
mutex.unlock();
}
/**
* @brief 关闭日志
*/
void LogManage::closeFile()
{
try {
if(file.isOpen()) {
file.flush();
file.close();
}
} catch (std::exception ex) {
qCritical() << "关闭日志失败:" << ex.what();
}
}
第三步:其他类调用写日志
#include "logmanage.h"
LogManage::log("写日志测试");

浙公网安备 33010602011771号