扫码一下
查看教程更方便
使用 PM2 启动应用程序后,您可以轻松查阅和管理日志。
日志文件保存在 $HOME/.pm2/logs
目录中
要显示应用程序的日志,可以使用命令
$ pm2 logs
$ pm2 logs -h
Usage: logs [options] [id|name|namespace]
stream logs file. Default stream all logs
Options:
--json json log output
--format formated log output
--raw raw output
--err only shows error output
--out only shows standard output
--lines <n> output the last N lines, instead of the last 15 by default
--timestamp [format] add timestamps (default format YYYY-MM-DD-HH:mm:ss)
--nostream print logs without lauching the log stream
--highlight [value] highlights the given value
-h, --help output usage information
显示指定应用程序的日志
$ pm2 logs server
[TAILING] Tailing last 15 lines for [server] process (change the value with --lines option)
/Users/liuhanzeng/.pm2/logs/server-error.log last 15 lines:
0|server | at listenInCluster (net.js:1366:12)
0|server | at Server.listen (net.js:1452:7)
0|server | at Object.<anonymous> (/Users/jiyik/workspace/node/server.js:12:4)
0|server | at Module._compile (internal/modules/cjs/loader.js:1068:30)
0|server | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
0|server | at Module.load (internal/modules/cjs/loader.js:933:32)
0|server | at Function.Module._load (internal/modules/cjs/loader.js:774:14)
0|server | at Object.<anonymous> (/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
0|server | at Module._compile (internal/modules/cjs/loader.js:1068:30) {
0|server | code: 'EADDRINUSE',
0|server | errno: -48,
0|server | syscall: 'listen',
0|server | address: '::',
0|server | port: 8888
0|server | }
...
使用 Json 格式显示应用程序日志
$ pm2 logs --json
显示server应用程序的1000行日志
$ pm2 logs server --lines 1000
也可以使用 cli 的控制面板检查日志
$ pm2 monit
模块 pm2-logrotate
使用有限的磁盘空间自动旋转并保留所有日志文件。
安装
pm2-logrotate
$ pm2 install pm2-logrotate
我们使用以下命令将清空 PM2 管理的当前应用程序日志:
$ pm2 flush
也可以在后面使用 name/id 指定特定的应用程序
$ pm2 flush server
运行 pm2 start app.js [OPTIONS]
时,我们可以将以下任何选项传递给 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
要轻松地为应用程序日志添加前缀,我们可以传递选项 --time
:
$ pm2 start server.js --time
# 或者重启server
$ pm2 restart server --time
在配置文件中,可以使用以下选项:
字段 | 类型 | 示例 | 描述 |
---|---|---|---|
error_file | (string) | 指定错误日志文件 (默认 $HOME/.pm2/logs/XXXerr.log) | |
out_file | (string) | 指定标准输出日志文件 (默认 $HOME/.pm2/logs/XXXout.log) | |
pid_file | (string) | 指定pid进程文件 (默认 $HOME/.pm2/pid/app-pm_id.pid) | |
merge_logs | boolean | true | 如果设置为 true,则避免使用进程 id 后缀日志文件 |
log_date_format | (string) | “YYYY-MM-DD HH:mm Z” | 日志时间日期格式 |
仅适用于集群模式 (node.js) 中的应用程序; 如果您希望集群进程的所有实例都记录到同一个文件中,您可以使用选项 --merge-logs
或在配置文件中加上选项 merge_logs: true
要禁用所有日志写入磁盘,您可以将选项 out_file 和 error_file 设置为 /dev/null
module.exports = {
apps : [{
name: 'Business News Watcher',
script: 'server.js',
instances: 1,
out_file: "/dev/null",
error_file: "/dev/null"
cron_restart: '0 0 * * *'
[...]
}]
}
可以提供 /dev/null
或 NULL
作为日志的输出(不取决于平台,它们是硬编码的字符串)。
$ sudo pm2 logrotate -u user
这将向 /etc/logrotate.d/pm2-user
写入一个基本的 logrotate 配置,如下所示:
/home/user/.pm2/pm2.log /home/user/.pm2/logs/*.log {
rotate 12
weekly
missingok
notifempty
compress
delaycompress
create 0640 user user
}