因为pm2本身没有日志分割功能,日志只能存在一个文件中,时间久了日志文件非常大,查看起来很麻烦,并且一些日志过一段时间后可能就没用了,依然留着对空间也是浪费,有了该插件,可以将日志文件根据我们的设定进行分割,比如按天进行分割,把每天的日志文件分别存储,这样查看起来是不是比较方便?并且还可以设置日志文件的最大总数,比如我们设置日志文件最多100个,那么当日志文件超过100个后会自动将最早的日志文件删除掉。

ecosystem.config.js

# 这里配置无法处理,要通过npm安装pm2插件配置处理
module.exports = {
    apps: [
        {
            script: 'dist/src/main.js',
            watch: false,
            instances: 1,
            autorestart: true,
            max_memory_restart: '2700M',
            env: { NODE_ENV: 'production' },
        },
    ],
};

Dockerfile

RUN npm install \\
    && npm install pm2 -g \\
    && pm2 install pm2-logrotate \\
    && pm2 set pm2-logrotate:retain 2 \\
    && pm2 set pm2-logrotate:max_size 50M

手工操作

单个文件 50M

最大两个

npm config set registry <https://registry.npmmirror.com>
npm config set strict-ssl false # https异常可以先忽略掉
pm2 install pm2-logrotate
pm2 set pm2-logrotate:retain 2 
pm2 set pm2-logrotate:max_size 50M
pm2 restart all

参数解释

image.png

配置项 简介
Compress 是否通过gzip压缩日志
max_size 单个日志文件的大小,比如上图中设置为1K(这个其实太小了,实际文件大小并不会严格分为1K)
retain 保留的日志文件个数,比如设置为10,那么在日志文件达到10个后会将最早的日志文件删除掉
dateFormat 日志文件名中的日期格式,默认是YYYY-MM-DD_HH-mm-ss,注意是设置的日志名+这个格式,如设置的日志名为abc.log,那就会生成abc_YYYY-MM-DD_HH-mm-ss.log名字的日志文件
rotateModule 把pm2本身的日志也进行分割
workerInterval 检查日志大小的间隔(最小值为1)单位为秒(控制模块检查log日志大小的循环时间,默认30s检查一次)
rotateInterval 设置强制分割,默认值是0 0 * * *,

资料

pm2 配置文件

https://github.com/keymetrics/pm2-logrotate