第三代软件开发-日志容量时间限制
关键字:
Qt
、 Qml
、 Time
、 容量
、 大小
项目介绍
重要说明☝
☀该专栏在第三代软开发更新完将涨价
日志容量时间限制
这也就是为什么我在前几篇提到了日志分离,因为我们的日志真的很完善了,所以我觉得可以作为一个轮子,放到其他项目中,今天这个需要就是要可以通过容量和时间来控制日志的存储,核心代码如下
/**
* @brief turing_log::logIsSpace 判断空间
*/
void Turing_Log::logIsSpace()
{
QString filePath = m_path;
QDir dirYear(filePath);
quint64 logSize=0;
quint64 logSaveSpace = m_logSaveSpace*1024*1024*1024;
dirYear.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
dirYear.setSorting(QDir::Name | QDir::Reversed);
foreach(QFileInfo fileInfoYear, dirYear.entryList())
{
QDir dirMonth(filePath + fileInfoYear.filePath());
dirMonth.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
dirMonth.setSorting(QDir::Name | QDir::Reversed);
foreach(QFileInfo fileInfoMonth, dirMonth.entryList())
{
QDir dirDay(filePath + fileInfoYear.filePath() + "/" + fileInfoMonth.filePath());
dirDay.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);
dirDay.setSorting(QDir::Name | QDir::Reversed);
foreach(QFileInfo fileInfoDay, dirDay.entryInfoList(QDir::Files))
{
logSize += fileInfoDay.size();
if(logSize > logSaveSpace)
{
qInfo() << "日志系统,空间超出,删除日志数据库" << fileInfoDay.filePath();
QFile::remove(fileInfoDay.filePath());
}
else
{
m_logSize = logSize;
}
}
if(dirDay.isEmpty())
{
QDir removeMonth(filePath + fileInfoYear.filePath() + "/" + fileInfoMonth.filePath());
if (removeMonth.removeRecursively())
{
qInfo() << "日志系统,空间超出,删除日志月文件夹" << filePath + fileInfoYear.filePath() + "/" + fileInfoMonth.filePath();
}
}
}
if(dirMonth.isEmpty())
{
QDir removeMonth(filePath + fileInfoYear.filePath());
if (removeMonth.removeRecursively())
{
qInfo() << "日志系统,空间超出,删除日志年文件夹" << filePath + fileInfoYear.filePath();
}
}
}
qInfo() << "日志系统,开机日志存储空间 : " << m_logSize/1024/1024 << "MB";
}
/**
* @brief turing_log::logIsMonth 判断时间
*/
void Turing_Log::logIsMonth(QString filePath)
{
m_logFileCount = 1;
QDir tmpDir(filePath);
tmpDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
tmpDir.setSorting(QDir::Name | QDir::Reversed);
foreach(QFileInfo fileInfo, tmpDir.entryList())
{
QDir tmpMonth(filePath + fileInfo.filePath());
tmpMonth.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks);
tmpMonth.setSorting(QDir::Name | QDir::Reversed);
foreach(QFileInfo fileInfoMonth, tmpMonth.entryList())
{
if(tmpMonth.isEmpty() || m_logFileCount > m_logSaveMonth)
{
QDir removeMonth(filePath + fileInfo.filePath() + "/" + fileInfoMonth.filePath());
if (removeMonth.removeRecursively())
{
qInfo() << "日志系统,时间超出,删除日志月文件夹" << filePath + fileInfo.filePath() + "/" + fileInfoMonth.filePath();
QFile::remove(filePath + fileInfoMonth.filePath());
}
}
else
m_logFileCount++;
}
}
qInfo() << "日志系统,开机日志存储时间: " << m_logFileCount;
}