在Boost 1.59 log v2中添加追加标志后文件旋转出现问题

时间:2015-12-02 07:45:28

标签: c++ logging boost

将附加标志“ 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 Log version:1.59

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

预期行为     日志文件应附加日志消息,当达到最大大小时,应正确旋转。

如果有任何解决方案,请告诉我。

1 个答案:

答案 0 :(得分:0)

在你的程序中,你给出相同的旋转尺寸和最大尺寸,这可能是个问题。因此,请尝试将最大尺寸设为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