gpt4 book ai didi

c++ - 在 Boost 1.59 log v2 中添加附加标志后文件轮换问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:50 25 4
gpt4 key购买 nike

将附加标志“keywords::open_mode = std::ios_base::app”添加到文件接收器后,当文件达到最大大小时,正常的文件旋转不会发生,如下面的代码所示:

typedef sinks::synchronous_sink< sinks::text_file_backend > file_sink;
boost::shared_ptr< logging::core > core = logging::core::get();
boost::shared_ptr< file_sink > sink(new file_sink(
keywords::file_name = "/tmp/test.log", // log file with full path
keywords::open_mode = std::ios_base::app, // append mode set
keywords::rotation_size = 5000000
));
sink->locked_backend()->set_file_collector(sinks::file::make_collector(
keywords::target = "/tmp/", // log file & target have same dir
keywords::max_size = 5000000,
keywords::min_free_space = 100000
));
sink->locked_backend()->scan_for_files();
sink->locked_backend()->auto_flush(true);
core->add_sink(sink);

boost 日志版本:1.59

观察到的行为: 每次使用 boost logger 的进程启动后;日志消息被附加到现有的日志文件中,而不是创建新的日志文件。但是,当日志文件达到最大大小时, boost 文件轮换策略不会发生,并且会在不将旧日志文件移动到目标目录的情况下创建新日志文件。

预期行为: 日志文件应附有日志消息,当达到最大大小时,应正确轮换。

如果有解决这个问题的方法请告诉我。

最佳答案

在您的程序中,您给出了相同的旋转尺寸和最大尺寸,这可能是个问题。因此,尝试将最大尺寸设为 5000000,将旋转尺寸设为 500000(最大尺寸/10)。这样在达到最大大小之前您可能有 9 或 10 个文件。

另一件事是您在此处设置的最大大小是用于文件夹(即://tmp - 文件夹)。一旦文件(所有文件)达到最大大小,旧文件将被删除,新文件将被放置在该文件夹中。

另一件事是您可以将文件名设置为 test_%N.log。以便您的旋转文件获得新名称,如 test_1.logtest_2.log 等。

引用这个网站:http://boost-log.sourceforge.net/libs/log/doc/html/log/detailed/sink_backends.html

关于c++ - 在 Boost 1.59 log v2 中添加附加标志后文件轮换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34037325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com