MAC OS 架設NGINX,還在手動刪除LOG嗎?,使用內建newsyslog自動管理壓縮LOG。

在 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

發表迴響