logrotate 用日期重命名文件

logrotate 用日期重命名文件

現在,logrotate 將舊日誌檔案重新命名為 access.log.1.gz、access.log.2.gz 等。等等- 每天一個。

我找不到為舊日誌檔案指定檔案名稱模式的任何選項。你知道該怎麼做嗎?

順便說一句,這是為了輪換 lighttpd 日誌文件,如果這很重要的話。

答案1

/etc/logrotate.conf/etc/logrotate.d/lighttpd或適當的文件(如果在其他地方)中,添加dateext到要應用日期後綴的節。

更多資訊來自logrotate 手冊頁:

日期文字

歸檔舊版的日誌文件,新增每日副檔名(例如 YYYYMMDD),而不是簡單地添加數字。

答案2

使用 cronolog - 它會先使用正確的檔案名稱寫入日誌檔案(例如,我通常會讓我的網頁伺服器將日誌檔案寫入 YYYY/MM/DD/access 或 YYYY/MM/DD/error 等)。有關使用 lighttpd 配置 cronolog 的更多詳細信息,請參見此處:http://redmine.lighttpd.net/projects/1/wiki/MigrationFromApache

(雖然該頁面提到 server.errorlog 無法通過 cronolog 運行,但似乎有一個錯誤報告已被標記為“已修復” - 不幸的是,我無法一次發布多個 URL,因為我是serverfault 的“新”用戶……)

答案3

我認為 lighttpd 或 logrotate 本身無法做到這一點。我看到有兩種選擇可以實現這一目標:

在 logrotate 之後直接編寫自己的腳本,就像在 cronjob 的末尾一樣。就像是:

if [ -f /var/log/lighttpd/access.log.1.gz ]; then`
    mv /var/log/lighttpd/access.log.1.gz /var/log/lighttpd/access.log.$date.gz
fi

或者,syslog-ng 可以按日期建立日誌文件,lighttpd 可以將日誌傳送到 syslog,而不是自己寫入日誌。

# syslog-ng.conf
destination df_lighttpd { file("/var/log/lighttpd/$YEAR$MONTH$DAY.log"); };
filter f_lighttpd { program("lighttpd"); };
log { source(s_all);  filter(f_lighttpd); destination(df_lighttpd); };

並在lighttpdconf中設定accesslog.use-syslog& 。server.errorlog-use-syslog


編輯:Cronolog 比我的建議更簡單和/或比我的建議更簡單,如果它適合你,我會接受。

相關內容