2017-07-16 62 views
0

我试图在后期初始化阶段设置boost日志max_size参数。 直到现在我才得以将其设置在初始化阶段是这样的:初始化后的Boost日志集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

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表示选择允许的最小值。