将附加标志“ 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记录器的过程开始后;日志消息将附加到现有日志文件,而不是创建新的日志文件。但是当日志文件达到最大大小时,则不会发生提升文件轮换策略,并且在不将旧日志文件移动到目标目录的情况下创建新的日志文件。
预期行为 日志文件应附加日志消息,当达到最大大小时,应正确旋转。
如果有任何解决方案,请告诉我。
答案 0 :(得分:0)
在你的程序中,你给出相同的旋转尺寸和最大尺寸,这可能是个问题。因此,请尝试将最大尺寸设为5000000,将旋转尺寸设为500000(最大尺寸/ 10)。因此,在达到最大大小之前,您可能有9或10个文件。
另一件事是你在这里设置的最大尺寸是文件夹(即:// tmp - 文件夹)。一旦文件(所有文件)达到最大值,那么旧文件将被删除,新文件将被放置在该文件夹中。
另一件事是您可以将文件名设置为test_%N.log
。这样您的轮播文件就会得到test_1.log
,test_2.log
等新名称。
请参阅此网站:http://boost-log.sourceforge.net/libs/log/doc/html/log/detailed/sink_backends.html