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

关于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日

悬赏问题

  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding