在 macOS 系統中,雖然不像 Linux 那樣預設提供 logrotate
工具,但其實內建了一套名為 newsyslog
的日誌管理機制。這套工具源自 BSD 系統,能夠有效地執行日誌的輪替(log rotation)與壓縮(compression),對於管理長期運作的服務或應用來說相當實用。
為什麼需要日誌輪替?
應用程式與系統不斷產生日誌,如果不加以管理,這些日誌檔案可能會占用大量磁碟空間,甚至影響系統效能。因此,透過定期輪替與壓縮日誌,不僅能節省空間,還能避免單一檔案過大難以閱讀。
macOS 的 newsyslog
工具簡介
macOS 系統自帶 newsyslog
工具,專門用來管理系統與應用的日誌輪替與壓縮行為。其核心是依賴設定檔 /etc/newsyslog.conf
來運作,每當滿足特定條件(如檔案大小、日期等),就會自動輪替日誌。
newsyslog.conf
設定方式
設定檔位置
/etc/newsyslog.conf
檔案格式說明
logfilename [owner:group] mode count size when flags [pid_file] [sig_num]
logfilename:完整日誌路徑,例如 /var/log/myapp.log
owner:group:選填,輪替後的檔案擁有者(如 root:wheel
)
mode:檔案權限,例如 640
count:保留幾份舊日誌
size:輪替觸發的大小(以 KB 計),例如 10240
表示 10MB
when:輪替時間條件,如:
@01
:每天凌晨 1 點D
:每天W0
:每週日M1
:每月 1 號
flags:動作標誌,如:
Z
:使用 gzip 壓縮J
:使用 bzip2 壓縮C
:清除後建立新檔
pid_file:應用程式的 PID 檔案路徑(若需發送訊號)
sig_num:發送給應用的訊號(如 HUP
)
實作設定範例
假設你有一個應用的日誌 /var/log/myapp.log
,希望在以下條件下自動輪替:
- 當大小超過 10MB 時執行輪替
- 保留 7 份壓縮的輪替副本
- 壓縮格式為 gzip
- 輪替後對應用進程發送
HUP
訊號(PID 檔案在/var/run/myapp.pid
)
對應的設定行會是:
/var/log/myapp.log root:wheel 640 7 10240 * Z /var/run/myapp.pid HUP
驗證設定與手動執行
sudo newsyslog -nvv
手動強制執行
sudo newsyslog
這會根據條件執行符合的輪替作業,無需等候時間條件觸發。
注意事項
newsyslog
不支援通配符(wildcard),無法針對整個目錄自動處理多個檔案。但可以逐一為目錄內的每個日誌檔案設定。- 日誌檔案必須存在,並具備適當的讀寫權限。
- 編輯
/etc/newsyslog.conf
需使用sudo
權限。
管理多個 Nginx 日誌檔案範例
如果你在 Nginx 中有多個日誌,例如:
/opt/homebrew/var/log/nginx/access.log
/opt/homebrew/var/log/nginx/error.log
/opt/homebrew/var/log/nginx/custom.log
你可以這樣設定:
/opt/homebrew/var/log/nginx/access.log root:wheel 640 7 10240 * Z
/opt/homebrew/var/log/nginx/error.log root:wheel 640 7 10240 * Z
/opt/homebrew/var/log/nginx/custom.log root:wheel 640 7 10240 * Z
+ There are no comments
Add yours