在 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贊助商連結
