先来看两个问题
问:pm2-logrotate是什么?
答:pm2-logrotate可以理解为是一个pm2的插件,它扩充了pm2本身没有功能:日志管理,所以它的运行需要依靠pm2,想用它必须先安装pm2才可以。
问:为什么有pm2-logrotate?
答:因为pm2本身没有日志分割功能,日志只能存在一个文件中,时间久了日志文件非常大,查看起来很麻烦,并且一些日志过一段时间后可能就没用了,依然留着对空间也是浪费,有了该插件,可以将日志文件根据我们的设定进行分割,比如按天进行分割,把每天的日志文件分别存储,这样查看起来是不是比较方便?并且还可以设置日志文件的最大总数,比如我们设置日志文件最多100个,那么当日志文件超过100个后会自动将最早的日志文件删除掉,我们也不用再花时间去整理日志文件了,是不是很省心?
安装
NPM官网地址:https://www.npmjs.com/package/pm2-logrotate
安装:pm2 install pm2-logrotate(前提是已安装过pm2)
安装特定版本:pm2 install pm2-logrotate@2.2.0
参数介绍
安装完毕使用方法如上图:pm2 set pm2-logrotate:max_size 1K
格式是:pm2 set pm2-logrotate:{paramName} {value}
命令设置具体的参数,支持的参数有:
l Compress:是否通过gzip压缩日志
l max_size:单个日志文件的大小,比如上图中设置为1K(这个其实太小了,实际文件大小并不会严格分为1K)
l retain:保留的日志文件个数,比如设置为10,那么在日志文件达到10个后会将最早的日志文件删除掉
l dateFormat:日志文件名中的日期格式,默认是YYYY-MM-DD_HH-mm-ss,注意是设置的日志名+这个格式,如设置的日志名为abc.log,那就会生成abc_YYYY-MM-DD_HH-mm-ss.log名字的日志文件
l rotateModule:把pm2本身的日志也进行分割
l workerInterval:设置启动几个工作进程监控日志尺寸,最小为1
rotateInterval:设置强制分割,默认值是0 0 * * *,意思是每天晚上0点分割,这个足够了个人觉得
设置完毕后可通过pm2 conf pm2-logrotate来查看详细的配置。
存在问题
我在使用过程中发现一个问题:只有当日志文件大小超过上限时都会把日志追加到最新的文件中,比如设置了日志文件名为app-out.log,日志文件大小为1M,那么在app-out.log文件没有超过1M时,即使第二天新建了日志文件app-out_yyyy-mm-dd_hh-mm-ss.log,但是依然会把日志追加到app-out.log中而非新建的日志文件中,更坑的是,在超过设定的大小后,它是把超出部分写到新的日志文件中,然后继续在app-out.log中追加- -,在官方文档中也没有发现对这个问题的说明。
不过,值得高兴的是,万能的网友解决了这个问题!Github地址在这里,请开心享用。