<-
Apache > HTTP 伺服器 > 文件 > 2.4 版 > 程式

rotatelogs - 使用 Apache 日誌輪替的管道日誌記錄程式

可用的語言: 英  |  法  |  韓  |  土 

rotatelogs 是一個連接 Apache 管道日誌檔功能的簡單程式。它支援基於時間間隔或日誌最大大小的輪替。

Support Apache!

另請參閱

top

概要

rotatelogs [ -l ] [ -L 連結名稱 ] [ -p 程式 ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n 檔案數 ] 日誌檔 輪替時間|檔案大小(B|K|M|G) [ 偏移量 ]

top

選項

-l
造成使用當地時間而非格林威治時間作為間隔或基於大小的輪替使用 strftime(3) 格式化的基礎。
-L 連結名稱

造成建立一個從目前日誌檔到指定連結名稱的硬連結。這可以用於使用諸如 tail -F 連結名稱 的指令在輪替後持續監控日誌。

如果連結名稱不是一個絕對路徑,它就相對於 rotatelogs 的工作目錄,也就是當 rotatelogs 由伺服器執行時 ServerRoot

-p 程式
如果給予,rotatelogs 會在每次一個新的日誌檔被開啟時執行指定的程式。新開啟檔案的名稱作為第一個引數傳遞給該程式。如果在輪替後執行,舊的日誌檔會作為第二個引數傳遞。rotatelogs 不会在持續運作前等待指定的程式終止,也不會記錄在終止時返回的任何錯誤碼。衍生的程式使用與 rotatelogs 本身相同的標準輸入、輸出和錯誤輸出,並繼承環境。
-f
rotatelogs 啟動時立即開啟日誌檔案,而不必等待讀取第一個日誌檔案項目(對於非熱門網站,伺服器啟動與處理第一個要求之間可能會延後很長一段時間,也表示相關日誌檔案直到那之前都「不存在」,這會導致某些自動記錄工具出問題)
-D
如果日誌檔案放置路徑的父目錄不存在,就會建立它們。這樣一來,strftime(3) 格式設定就可以用於路徑,而不再只有檔案名稱。
-t
不輪替日誌檔案,而是將它截斷。當日誌是由類似 **tail** 的命令即時處理,且不需要封存資料時,這個選項很有用。檔案名稱不會增加字尾,然而包含 '%' 字元的格式字串會受到重視。
-T
開啟時,除了第一個日誌檔案外,都會被截斷。如果格式字串包含迴圈用的內容(例如,月份),這個選項就很實用。在 2.4.56 及後續版本提供此選項。
-v
在 STDERR 產生詳細資訊輸出。輸出包含組態解析結果,以及所有檔案開啟與關閉動作。
-e
透過 stdout 回應日誌。當日誌需要進一步以鏈中的其他工具即時處理時,這很實用。
-c
即使是空的,也會為每個間隔建立日誌檔案。
-n 檔案數量
使用不帶時間戳記、循環的檔案名稱清單。這個選項會在啟動及輪替時覆寫日誌檔案。在 -n 3 中,開啟的一系列日誌檔案包括「logfile」、「logfile.1」、「logfile.2」,然後覆寫「logfile」。
當此程式第一次開啟「logfile」時,只有在也提供 -t 時檔案才會被截斷。每次輪替後,總會先截斷目標檔案。對於沒有 -t 且已有日誌檔案存在的尺寸輪替,這個選項可能會產生非預期的行為,例如,第一筆日誌項目會傳送到「logfile.1」,且即使之後的「logfile.n」尚未使用,「logfile.1」中的項目也不會被保留。
在 2.4.5 及後續版本提供此選項。
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

輪替時間
日誌檔輪替之間的時間,單位為秒。輪替會在這個區間的開頭執行。例如,如果輪替時間為 3600,則日誌檔會在每個小時的開頭輪替;如果輪替時間為 86400,則日誌檔會在每天午夜輪替。(如果在區間內未記錄任何資料,則不會建立任何檔案。)
檔案大小(B|K|M|G)
最大檔案大小,其後只有一個字母,為 B(位元組)、K(千位元組)、M(百萬位元組)或 G(十億位元組)。

當指定時間和大小時,必須在時間之後提供大小。每當時間或大小限制任一者達到時,就會執行輪替。

位移
與 UTC 的分鐘位移量。如果略過,則假設為零,並使用 UTC。例如,要在 UTC -5 小時時區使用當地時間,請為這個引數指定 -300 的值。在多數情況下,應使用 -l,而非指定位移量。
top

範例

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 個月的日誌記錄,無需外力維護。

top

可攜性

下列日誌格式字串替換應支援所有 strftime(3) 實作,關於函式庫特定延伸模組,請參閱 strftime(3) 手冊頁。

%A完整的星期名稱(在地化)
%a3 個字元的星期名稱(在地化)
%B完整的月份名稱(在地化)
%b3 個字元的月份名稱(在地化)
%c日期與時間(在地化)
%d2 位數的月分日
%H2 位數的小時(24 小時制)
%I2 位數的小時(12 小時制)
%j3 位數的年度日
%M2 位數的分鐘
%m2 位數的月分
%p12 小時制上午/下午(在地化)
%S2 位數的秒
%U2 位數的年度週(星期日為每周的第一天)
%W2 位數的年度週(星期一為每周的第一天)
%w1 位數的星期(星期日為每周的第一天)
%X時間(在地化)
%x日期(在地化)
%Y4 位數的年份
%y2 位數的年份
%Z時區名稱
%%文字 `%'

可用的語言: 英  |  法  |  韓  |  土 

top

註解

注意事項
此處並非問答區。放置於此的留言應針對改善文件或伺服器提出建議,若其已實作或被視為無效/跑題,我們的管理員可能會移除留言。關於如何管理 Apache HTTP 伺服器的問題,應轉向我們的 IRC 頻道 (#httpd,位在 Libera.chat) 提出,或寄送至我們的 郵寄清單