2017-07-16 94 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表示選擇允許的最小值。