m0_46613785 2024-04-12 15:41 采纳率: 0%
浏览 4

关于Log4QT日志架构输出只有调用关闭才会写入到本地文件中的问题!(相关搜索:log4qt)

记录日志的文本用记事本打开查看日志的情况下,此时log4qt记录日志只会保存到内存中,如果记事本一直不关闭,当内存满时就会导致程序崩溃,请问如何解决?

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-12 15:41
    关注

    引自免费微信小程序:皆我百晓生

    为了解决Log4Qt日志只在关闭时写入文件的问题,你需要确保日志缓冲区及时刷新到磁盘。你可以通过设置合适的缓冲策略来实现这一点。下面是一个详细的步骤,以及相应的C++代码示例。

    首先,你需要在main.cpp或其他适当的地方初始化Log4Qt,并设置一个合适的Appender(例如,RollingFileAppender)。

    #include <QCoreApplication>
    #include "log4qt/logger.h"
    #include "log4qt/fileappender.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        // Initialize Log4Qt
        Logger::init();
    
        // Create a RollingFileAppender with a daily rollover and a maximum of 7 rotated files
        auto appender = new RollingFileAppender();
        appender->setName("MyAppender");
        appender->setLayout(new PatternLayout("%d{%Y-%m-%d %H:%M:%S} [%p] %t: %m%n"));
        appender->setFileName(QStringLiteral("my_log_file.log"));
        appender->setMaxBackupIndex(7);
        appender->setRolloverInterval(1); // Rollover every day
    
        // Set immediate flush to true to ensure logs are written immediately to disk
        appender->setImmediateFlush(true);
    
        // Add the appender to the root logger
        Logger::root()->addAppender(appender);
    
        // Write some test log messages
        Logger::root()->info(QStringLiteral("This is an info message."));
        Logger::root()->warn(QStringLiteral("This is a warning message."));
    
        return a.exec();
    }
    

    这段代码创建了一个滚动日志文件Appender,设置了每日滚动生成新文件并保留最多7个旧文件。重要的是设置了setImmediateFlush(true),这将确保每次写入日志后立即刷新到磁盘,而不是等待缓冲区满才写入。

    这样配置后,即使在记事本或者其他应用程序打开日志文件的情况下,日志也会被实时写入到磁盘,不会因为内存溢出而影响程序运行。请注意,虽然设置了即时刷新,但仍然存在数据丢失的风险,尤其是在系统故障或电源中断的情况下。为了保证更高的可靠性,可以考虑使用更高级的日志框架或者数据库来存储日志。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月12日

悬赏问题

  • ¥200 基于同花顺supermind的量化策略脚本编辑
  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?