一、pm2 自定義 log 日志文件位置
直接引用 PM2 官網描述:https://pm2.keymetrics.io/docs/usage/log-management/
1、CLI
示例:pm2 start echo.js --merge-logs --log-date-format="YYYY-MM-DD HH:mm Z"
When running pm2 start app.js [OPTIONS]
you can pass any of this options to the CLI:
-l --log [path] specify filepath to output both out and error logs - 指定文件路徑以輸出輸出日志和錯誤日志 -o --output <path> specify out log file - 指定輸出日志文件 -e --error <path> specify error log file - 指定錯誤日志文件 --time prefix logs with standard formated timestamp - 帶有標准格式化時間戳的前綴日志 --log-date-format <format> prefix logs with custom formated timestamp - 帶有自定義格式時間戳的前綴日志 --merge-logs when running mutiple process with same app name, do not split file by id
- 使用相同的應用程序名稱運行多個進程時,不要按id拆分文件
2、JSON way
{ "script" : "echo.js", "error_file" : "err.log", "out_file" : "out.log", "merge_logs" : true, "log_date_format" : "YYYY-MM-DD HH:mm Z" }
3、合並輸出和錯誤日志
要將所有日志合並到同一個文件中,請為錯誤文件、輸出文件或使用其他日志文件設置相同的值。例如,這會將out和err分開,但會添加一個組合文件:
{ "log_file": "combined.outerr.log", "out_file": "out.log", "err_file": "err.log" }
或者,如果您希望在沒有任何其他文件的情況下將out和err合並,只需使用相同的日志文件:
{ "out_file": "combined.log", "err_file": "combined.log" }
請注意,相關日志路徑通常會寫入PM2_主頁(~/.PM2/logs)。
二、日志管理
pm2的日志模塊默認是每一個服務進程都分配兩個默認的日志文件:(1)普通日志;(2)錯誤日志。
這兩個日志文件存放於 /root/.pm2/logs 中,如果 pm2 管理 5 個服務,那么該文件夾下總共有10個日志文件,並且隨着時間不斷增加,很容易就會產生很多個上 g 的日志文件,導致了服務器的磁盤空間不足的問題
1、解決方法:
(1)合並日志: 將所有服務的日志合並到一個日志文件中
(2)循環回滾保存 : 可以選擇1小時保存一份版本並且壓縮,合並日志清空,重新記錄
(3)利用錯誤收集系統,保證服務的錯誤正常收集
2、如何做呢
(1)在pm2的配置文件中加入以下配置項
output: '/root/.pm2/logs/out.log', error: '/root/.pm2/logs/error.log', merge_logs: true
(2)安裝pm2-logrotate
pm2 install pm2-logrotate@2.2.0
(3)配置循環回滾策略
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
pm2 set pm2-logrotate:rotateInterval '* * */1 * *' //每小時備份
pm2 set pm2-logrotate:compress true //壓縮
pm2 set pm2-logrotate:retain 3 //備份最多3份,也就是備份最近3小時的日志
三、pm2-logrotate 介紹
pm2 本身是可以輸出日志文件的,默認的文件路徑:
error log path │ /home/username/.pm2/logs/app-error-0.log out log path │ /home/username/.pm2/logs/app-out-0.log
但是 pm2 的日志文件不能自動分割,這會導致一個文件不斷變大,不但影響性能,查看這些日志也會帶來麻煩。所以需要pm2-logrotate
來實現自動分割日志。
1、pm2-logrotate:https://www.npmjs.com/package/pm2-logrotate
2、安裝pm2-logrotate:pm2 install pm2-logrotate,
注意是用pm2命令,不是npm命令
安裝完成后就可以通過pm2 list
命令查看模塊列表了
3、pm2-logrotate 具體配置說明:
max_size
(默認10M): 當一個文件的大小超過這個值時,它將會對其進行分割。你可以在最后指定單位:10G, 10M, 10Kretain
(默認為30個文件日志):保留日志文件數量compress
(默認false):是否啟用壓縮處理所有的旋轉日志dateFormat
(默認格式YYYY-MM-DD_HH-mm-ss
):日志文件名稱格式rotateModule
(默認true):像其他應用程序一樣旋轉pm2模塊的日志workerInterval
(默認30秒):檢查日志大小的時間間隔rotateInterval
(默認每天午夜0 0 * * *):定時執行旋轉TZ
(默認系統時間):偏移保存日志文件的標准tz數據庫時區
最后千萬不要忘了重啟服務:pm2 restart [id/name]
4、可以嘗試使用 pm2 set pm2-logrotate:max_size 1K (1KB)
設置日志文件最大為1KB,
代碼中console.log
的內容會輸出到 /home/username/.pm2/logs/app-out-0.log
, 大小達到 1KB 就會自動生成 app-out-0__2018-01-25_16-58-16.log
這種格式的日志文件。
在/home/username/.pm2/logs/
(默認路徑,可以配置)路徑下還有
app-error-0.log
pm2-logrotate-out-1.log
pm2-logrotate-error-1.log
幾個文件
app-out-0.log
文件記錄的就是console.log
輸出,app-error-0.log
記錄的是錯誤輸出,pm2-logrotate-out-1.log
和 pm2-logrotate-error-1.log
分別記錄的是分割的日志文件,是這樣的內容:
"/home/username/.pm2/pm2__2018-01-25_16-57-16.log" has been created "/home/username/.pm2/logs/app-out-0__2018-01-25_16-58-16.log" has been created "/home/username/.pm2/logs/app-out-0__2018-01-25_16-58-46.log" has been created