我有一個記錄器系統,它基本上是一種用線程安全方式將數據寫入std :: clog的奇特方式。Linux/c + +日誌輪換計劃
我也,重定向std::clog
到像這樣的文件:
int main() {
std::ofstream logfile(config::logname, std::ios::app);
std::streambuf *const old_buffer = std::clog.rdbuf(logfile.rdbuf());
// .. the guts of the application
std::clog.rdbuf(old_buffer);
}
這個偉大的工程。不過,我的應用程序也產生了非常大的日誌。我想知道什麼是正確旋轉我的日誌文件的好方法。有沒有一種安全的方式通過cron任務來切換文件?我猜不。
我唯一能想到的就是如果我讓應用程序本身打開一個新文件,並在持有日誌互斥鎖的同時重定向cld的rdbuf。但是這感覺像是一個便宜的解決方案,我需要檢查一下,看看是否應該經常輪換日誌以使其有效。有一個更好的方法。
所以基本上你所說的是我添加了一個SIGUSR1處理程序,它在關閉/重新打開的同時按住日誌鎖定,並且logrotate會發出我的應用程序的信號有定期? – 2009-01-26 16:58:09
即使只有配置logrotate才能旋轉日誌,並將其設置爲嚮應用發送SIGUSR1。它不會自動發生。 – 2009-01-26 17:48:01