2015-12-02 63 views
1

向文件接收器添加追加標誌「keywords :: open_mode = std :: ios_base :: app」後文件達到正常文件輪轉最大尺寸,如以下代碼中指定:在Boost中添加追加標誌後文件旋轉的問題1.59日誌v2

typedef sinks::synchronous_sink<sinks::text_file_backend> file_sink; 
     boost::shared_ptr<logging::core> core = logging::core::get(); 
     boost::shared_ptr<file_sink> sink(new file_sink(
      keywords::file_name = "/tmp/test.log", // log file with full path 
      keywords::open_mode = std::ios_base::app, // append mode set 
      keywords::rotation_size = 5000000 
      )); 
     sink->locked_backend()->set_file_collector(sinks::file::make_collector(
      keywords::target = "/tmp/", // log file & target have same dir 
      keywords::max_size = 5000000, 
      keywords::min_free_space = 100000 
      )); 
     sink->locked_backend()->scan_for_files(); 
     sink->locked_backend()->auto_flush(true); 
     core->add_sink(sink); 

升壓登錄版本:1.59

行爲觀察: 每次使用升壓記錄器開始處理後;日誌消息正在追加到現有的日誌文件中,而不是創建新的日誌文件。但是,當日志文件達到最大大小時,不會發生增強文件輪轉策略,並且無需將舊日誌文件移動到目標目錄即可創建新日誌文件。

預期行爲: 日誌文件應附加日誌消息,當達到最大大小時應正確旋轉。

請讓我知道,如果有任何解決這個問題。

+0

任何更新或解決方案? – SGPJ

+0

除了明顯不正確的'max_size'值,日誌文件旋轉對我來說工作正常。文件名'test.log'不包含任何佔位符,所以我在'tmp'目錄下'test.log00000','test.log00001'等。 –

+0

另外,您應該知道,如果將日誌文件收集到與最初寫入日誌文件的目錄不同的目錄中,則在重新啓動進程後不會再附加該文件。在退出進程前,終止之前由進程寫入的最後一個文件將被輪換,並且下一個進程將在其位置創建一個新文件。只有當前一個文件沒有移動到另一個目錄時,文件追加纔會發生。 –

回答

0

在您的程序中,您給出相同的旋轉尺寸和最大尺寸,這可能是一個問題。所以嘗試最大尺寸爲5000000,旋轉尺寸爲500000(最大尺寸/ 10)。這樣在達到最大尺寸之前可能有9或10個文件。

另一件事是你在這裏設置的最大尺寸是用於文件夾(即:// tmp - 文件夾)。一旦文件(所有文件)達到最大值的大小,舊文件將被刪除,新文件將被放置在該文件夾中。

另一件事是你可以設置文件名爲test_%N.log。所以,你的旋轉文件中獲取新的名字爲test_1.logtest_2.log

請參閱網站:http://boost-log.sourceforge.net/libs/log/doc/html/log/detailed/sink_backends.html