PM2 日志管理

pm2 的日志模块默认是每一个服务进程都分配两个默认的日志文件,普通日志和错误日志。

这两个日志文件存放于/root/.pm2/logs中,如果pm2管理5个服务,那么该文件夹下总共有10个日志文件,并且随着时间不断增加,很容易就会产生很多个上g的日志文件,导致了服务器的磁盘空间不足的问题


清理日志

在 pm2 运行时,如果手动删除日志文件,那么后续的日志不会被写入,需要重启pm2的进程。

使用 pm2 flush 可以清理日志不需要重启。


查看实时日志

pm2 logs
# only app logs
pm2 logs app


日志文件配置

可以自定义日志文件位置:

module.exports = {
 apps: [{
  name: 'app',
  script: 'app.js',
  output: './out.log',
  error: './error.log',
  log: './combined.outerr.log',
 }]
}

output 只有常规输出(console.log)

error 只有错误输出(console.error)

log 结合output(常规输出)和error(错误输出),默认禁用



Rotating Logs

如果想把一个大的日志文件分为多个小文件存储,可以使用logrotate。

pm2 install pm2-logrotate


合并日志(Merging Logs)

在 cluster 模式下,每个cluster都有它自己的日志,可以使用merge选项来收集所有相关日志到一个文件里去。

module.exports = {
 apps: [{
  name: 'app',
  script: 'app.js',
  output: './out.log',
  error: './error.log',
  merge_logs: true,
 }]
}

日志文件依旧按照output/error/log划分。


禁用日志

可以把日志发送到/dev/null来实现禁用日志的目的。



未测试解决方法:

1. 合并日志: 将所有服务的日志合并到一个日志文件中

2. 循环回滚保存 : 可以选择1小时保存一份版本并且压缩,合并日志清空,重新记录

3. 利用错误收集系统,保证服务的错误正常收集


在pm2的配置文件中加入以下配置项

output: '/root/.pm2/logs/out.log',
error: '/root/.pm2/logs/error.log',
merge_logs: true


配置循环回滚策略

┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ 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小时的日志



真诚赞赏,手留余香
赞赏
随机推荐
语法图(Syntax diagram)、铁路图(railroad diagrams)
白无常「两小时」
PHP curl的GET和POST
MySQL 自定义函数获取一个分类的无限级子分类
javascript 为什么判断是否相等用===,而不是==
站着编程两年后我身体上的变化
Windows下Cordova环境搭建及如何用android studio导入cordova项目生成apk
Windows批处理使用7-zip压缩多个文件夹
MySQL truncate 和 delete 的区别
使用 Photoshop 创建矢量图标库 Iconfont