初始化后,Boost Log set max_size

时间:2017-07-16 13:42:58

标签: c++ logging boost

我正在尝试在后初始化阶段设置boost log max_size参数。 到目前为止,我能够在初始化阶段将其设置为:

    logging::add_file_log(      
    keywords::auto_flush = true,
    keywords::target =BOOST_LOG_FOLDER,
    keywords::file_name =BOOST_LOG_FILE,
    keywords::time_based_rotation = sinks::file::rotation_at_time_point(0,0,0),
    keywords::rotation_size = 30 * 1024 * 1024,
    keywords::max_size = 60 * 1024 * 1024,
    );

现在我想在此调用后更改max_size(根据输入的值)。

我不知道如何做到这一点

1 个答案:

答案 0 :(得分:1)

max_size参数指定目标目录中旋转文件的最大总大小。它是一个收集器参数,因此为了更改它,您必须创建一个新的收集器并将其设置为add_file_log返回的文件接收器。

typedef sinks::synchronous_sink< sinks::text_file_backend > sink_t;
boost::shared_ptr< sink_t > sink = logging::add_file_log(      
    keywords::auto_flush = true,
    keywords::target =BOOST_LOG_FOLDER,
    keywords::file_name =BOOST_LOG_FILE,
    keywords::time_based_rotation = sinks::file::rotation_at_time_point(0,0,0),
    keywords::rotation_size = 30 * 1024 * 1024,
    keywords::max_size = 60 * 1024 * 1024,
);

sink->locked_backend()->set_file_collector(
    sinks::file::make_collector(
        keywords::target =BOOST_LOG_FOLDER,
        keywords::max_size = 30 * 1024 * 1024
    )
);

但请注意,库只能以这种方式减少限制。这是因为每个目标目录只有一个收集器实例,因此即使多个接收器将文件旋转到同一目录中,也会在整个应用程序中普遍维护目录的限制。 make_collector将验证为给定目标目录设置的当前限制,并设置最严格的限制,max_size表示选择允许的最小值。