Linux
輪換由記錄到標準輸入的程序生成的日誌
我有一個長時間執行的程序,它將其日誌文件寫入
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
它可能已被截斷,則副檔名可能是。有關更多資訊,請查看連結。