让我们考虑boost :: log doc中的示例。
void init()
{
logging::add_file_log
(
keywords::file_name = "sample_%N.log",
keywords::rotation_size = 10 * 1024 * 1024,
keywords::open_mode = (std::ios::out | std::ios::app),
keywords::format = "[%TimeStamp%]: %Message%"
);
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
int main(int, char*[])
{
init();
logging::add_common_attributes();
using namespace logging::trivial;
src::severity_logger< severity_level > lg;
BOOST_LOG_SEV(lg, trace) << "A trace severity message";
return 0;
}
第一次启动应用程序和文件sample_0.log
。第二次我启动应用程序新消息将附加到同一文件sample_0.log
。我希望通过应用程序创建sample_1.log
。我想每次运行应用程序都旋转日志文件。如何用boost::log
存档?谢谢。
您可能不希望 rotate 启动文件(这意味着关闭当前文件并打开新文件(,而是生成一个文件名,不会与应用程序之前运行的文件相冲突。
为此需要做两件事。首先,您必须配置文件收集器,该文件收集器将接收旋转的日志文件并选择管理它们。文件收集器在一个目标目录上运行,其中所有旋转的文件都存储在其中。您可以通过在add_file_log
调用中添加命名参数的target
来指定该目录;这将为您的水槽创建一个文件收集器。请注意,目标目录可以与您的水槽创建文件的一个相同 - 这仅意味着将旋转的日志文件移动到目标目录是一个no -op。
第二,在您的应用程序启动时,需要在接收器后端调用scan_for_files
方法。这将导致文件收集器扫描目标目录中的日志文件,这些文件可能会在以前的运行中保留。如果文件名称模式包括文件计数器,则呼叫还可以检测下一个计数器值,这就是您想要的。add_file_log
函数将自动为您执行此操作,如果您配置了File Collector(即添加了target
命名参数(,但是如果您手动创建水槽,则必须自己称呼它。
在此处记录了旋转文件,包括scan_for_files
功能。