Linux

輪換由記錄到標準輸入的程序生成的日誌

  • November 5, 2012

我有一個長時間執行的程序,它將其日誌文件寫入stdout. 我想將此輸出保存到不同的文件中,自動維護這些文件(如刪除/歸檔舊文件),而無需重新啟動主程序。

解決方案是將輸出發送到文件(process > log.txt),並logrotate在其上使用,但logrotate需要重新啟動程序,這是不可能的。

另一種是將輸出通過管道傳輸到cronolog( process | cronolog),但在這種情況下,舊文件不會被刪除/存檔,這意味著我必須製作一個程序來為我進行維護。

最好的辦法是能夠同時使用這兩個實用程序,因為cronolog我不需要重新啟動程序,並且logrotate會完全按照我的意願維護舊的日誌文件。有沒有辦法讓這兩個程序相互配合?如果沒有,什麼是解決這個問題的好方法?

來自 DJB 的daemontools的Multilog可以(幾乎)完全滿足您的要求。我知道的唯一缺點是沒有多少發行版帶有daemontools包。

如果您沒有使用svc(daemontools 的一部分)管理您的應用程序,您將不得不找到一種方法將輸出傳遞給類似的命令

multilog t s1048576 n100 ./my_log_directory

這轉化為:

  • t: 插入一個 tai64n 時間戳(可以用 轉換為可讀時間tai64nlocal
  • s1048576: 當日誌文件增長到 1MiB 時旋轉日誌文件
  • n100: 保留不超過 100 個旋轉文件
  • ./my_log_directory``.: 以or開頭的任何內容/- 將日誌寫入該目錄

寫入的日誌將具有 filename current,並且當 multilog 輪換日誌時,它將被重命名為@<tai64n timestamp>.s文件名顯示文件輪換時間的位置。.s如果文件被安全刷新,或者.u它可能已被截斷,則副檔名可能是。

有關更多資訊,請查看連結。

引用自:https://serverfault.com/questions/445118