一、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