pm2日志管理

在应用中,有效的日志是宝贵的财富,可以帮助开发解决很多问题。

pm2中的日志可实时获取并保存在硬盘中,可以自定义日志的格式以及日志文件的创建方式。

访问日志

实时日志

1
2
3
4
5
# all apps logs
pm2 logs

# only app logs
pm2 logs app

日志文件

默认情况下,所有的日志文件会被保存在$HOME/.pm2/logs下。

可以使用如下命令清空所有应用的日志:

1
pm2 flush

日志文件配置

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

1
2
3
4
5
6
7
8
9
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

1
pm2 install pm2-logrotate

合并日志(Merging Logs)

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

1
2
3
4
5
6
7
8
9
module.exports = {
apps: [{
name: 'app',
script: 'app.js',
output: './out.log',
error: './error.log',
merge_logs: true,
}]
}

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

禁用日志

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

1
2
3
4
5
6
7
8
module.exports = {
apps: [{
name: 'app',
script: 'app.js',
output: '/dev/null',
error: '/dev/null',
}]
}

日志格式

JSON

可以输出为JSON格式的日志

1
Hello World!

变成

1
2
3
4
5
6
7
{
"message": "Hello World!\n",
"timestamp": "2018-08-01T14:51:38.896Z",
"type": "out",
"process_id": 0,
"app_name": "app"
}

只需要在ecosystem文件里加上参数:
“log_type”: “json”

时间戳格式

可以输出带有时间戳的日志

1
Hello World!

变成

1
01-08-2018: Hello World!

只需要在ecosystem文件里加上参数:
“log_date_format”: “DD-MM-YYYY”

时间格式必须安装moment格式。