BOOST ::日志是每次运行应用程序时都可能旋转文件



让我们考虑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功能。

最新更新