【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("写日志测试");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端