Apache HTTP 伺服器 2.4 版
rotatelogs
是一個連接 Apache 管道日誌檔功能的簡單程式。它支援基於時間間隔或日誌最大大小的輪替。
rotatelogs [ -l ] [ -L 連結名稱 ] [ -p 程式 ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n 檔案數 ] 日誌檔 輪替時間|檔案大小(B|K|M|G) [ 偏移量 ]
-l
strftime(3)
格式化的基礎。-L
連結名稱造成建立一個從目前日誌檔到指定連結名稱的硬連結。這可以用於使用諸如 tail -F 連結名稱
的指令在輪替後持續監控日誌。
如果連結名稱不是一個絕對路徑,它就相對於 rotatelogs
的工作目錄,也就是當 rotatelogs
由伺服器執行時 ServerRoot
-p
程式rotatelogs
會在每次一個新的日誌檔被開啟時執行指定的程式。新開啟檔案的名稱作為第一個引數傳遞給該程式。如果在輪替後執行,舊的日誌檔會作為第二個引數傳遞。rotatelogs
不会在持續運作前等待指定的程式終止,也不會記錄在終止時返回的任何錯誤碼。衍生的程式使用與 rotatelogs
本身相同的標準輸入、輸出和錯誤輸出,並繼承環境。-f
rotatelogs
啟動時立即開啟日誌檔案,而不必等待讀取第一個日誌檔案項目(對於非熱門網站,伺服器啟動與處理第一個要求之間可能會延後很長一段時間,也表示相關日誌檔案直到那之前都「不存在」,這會導致某些自動記錄工具出問題)-D
strftime(3)
格式設定就可以用於路徑,而不再只有檔案名稱。-t
-T
-v
-e
-c
-n 檔案數量
-t
時檔案才會被截斷。每次輪替後,總會先截斷目標檔案。對於沒有 -t
且已有日誌檔案存在的尺寸輪替,這個選項可能會產生非預期的行為,例如,第一筆日誌項目會傳送到「logfile.1」,且即使之後的「logfile.n」尚未使用,「logfile.1」中的項目也不會被保留。logfile
日誌檔案的路徑加上基本檔名。如果 logfile 包含任何 '%' 字元,它會被當作 strftime(3)
的格式設定字串。否則,會自動加上字尾 .nnnnnnnnnn,表示時間(秒)(除非使用 -t 選項)。兩種格式都會根據目前時段的開始時間計算。例如,如果指定輪替時間為 86400,則從 strftime(3)
格式建立的小時、分鐘與秒數欄位全部都會是零,表示目前 24 小時時段的開始(午夜)。
使用 strftime(3)
檔案命名格式時,請確定日誌檔格式具有足夠的詳細度,以在每次輪替日誌時產生不同的檔名。否則,輪替會覆寫同一個檔案,而非開始新的檔案。例如,如果 日誌檔 是 /var/log/errorlog.%Y-%m-%d
,日誌輪替為 5 MB,但在同一天內兩度達到 5 MB,則會產生同一個日誌檔名稱,而且日誌輪替會持續寫入同一個檔案。
如果日誌檔並非絕對路徑,則會相對於 rotatelogs
的工作目錄,即伺服器執行 rotatelogs
時的 ServerRoot
。
輪替時間
檔案大小(B|K|M|G)
B
(位元組)、K
(千位元組)、M
(百萬位元組)或 G
(十億位元組)。當指定時間和大小時,必須在時間之後提供大小。每當時間或大小限制任一者達到時,就會執行輪替。
位移
-300
的值。在多數情況下,應使用 -l
,而非指定位移量。CustomLog "|bin/rotatelogs /var/log/logfile 86400" common
這個指令會建立檔案 /var/log/logfile.nnnn,其中 nnnn 為日誌名義上開始時系統的時間(這個時間永遠是輪替時間的倍數,因此你可以用 cron 指令碼與它同步)。在每個輪替時間的結尾(此處為 24 小時後),會開始新的日誌。
CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m.%d 86400" common
這個指令會建立檔案 /var/log/logfile.yyyy.mm.dd,其中 yyyy 為年份,mm 為月份,而 dd 為月份中的日期。記錄會在每天午夜,以當地時間切換到新的檔案。
CustomLog "|bin/rotatelogs /var/log/logfile 5M" common
這個組態會在日誌檔達到 5 MB 時輪替日誌檔。
ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"
這個組態會在日誌檔達到 5 MB 時輪替錯誤日誌檔,而且會為日誌檔名稱建立格式為 errorlog.YYYY-mm-dd-HH_MM_SS
的字尾。
CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common
這個指令會建立檔案 /var/log/logfile
,在啟動時將該檔案截斷,然後每天截斷一次該檔案。在此情況下,預期會有一個個別程序(例如 tail)會即時處理檔案。
CustomLog "|bin/rotatelogs -T /var/log/logfile.%d 86400" common
若伺服器在該月的第一天(或重新啟動)開啟,此內容將附加至 /var/log/logfile.01
。若在該月的第二天寫入日誌記錄,/var/log/logfile.02
將會被截斷,且新的記錄將會被新增至首頁。此範例旨在保留大約 1 個月的日誌記錄,無需外力維護。
下列日誌格式字串替換應支援所有 strftime(3)
實作,關於函式庫特定延伸模組,請參閱 strftime(3)
手冊頁。
%A | 完整的星期名稱(在地化) |
%a | 3 個字元的星期名稱(在地化) |
%B | 完整的月份名稱(在地化) |
%b | 3 個字元的月份名稱(在地化) |
%c | 日期與時間(在地化) |
%d | 2 位數的月分日 |
%H | 2 位數的小時(24 小時制) |
%I | 2 位數的小時(12 小時制) |
%j | 3 位數的年度日 |
%M | 2 位數的分鐘 |
%m | 2 位數的月分 |
%p | 12 小時制上午/下午(在地化) |
%S | 2 位數的秒 |
%U | 2 位數的年度週(星期日為每周的第一天) |
%W | 2 位數的年度週(星期一為每周的第一天) |
%w | 1 位數的星期(星期日為每周的第一天) |
%X | 時間(在地化) |
%x | 日期(在地化) |
%Y | 4 位數的年份 |
%y | 2 位數的年份 |
%Z | 時區名稱 |
%% | 文字 `%' |