051-第三代软件开发-日志容量时间限制

第三代软件开发-日志容量时间限制

文章目录

关键字: QtQmlTime容量大小

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

日志容量时间限制

这也就是为什么我在前几篇提到了日志分离,因为我们的日志真的很完善了,所以我觉得可以作为一个轮子,放到其他项目中,今天这个需要就是要可以通过容量和时间来控制日志的存储,核心代码如下

C++ 复制代码
/**
 * @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;
}

相关推荐
丰锋ff10 小时前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
程与留13 小时前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci13 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
Littlehero_12115 小时前
QT自定义控件之热换站系统(源码开源)
开发语言·qt
Quz19 小时前
QML MouseArea 鼠标拖拽与滚轮缩放
qt
Quz19 小时前
QML MouseArea 事件传递、自定义按钮
qt
小庞在加油1 天前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
hy.z_7771 天前
【QT】1.QT初识(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)
qt
不会代码的小猴1 天前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨1 天前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5