教程 > pm2 教程 > pm2 基础 阅读:9

pm2 应用程序日志(logs)

使用 PM2 启动应用程序后,您可以轻松查阅和管理日志。

日志文件保存在 $HOME/.pm2/logs 目录中


Log 视图

要显示应用程序的日志,可以使用命令

$ 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

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_fileerror_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/nullNULL 作为日志的输出(不取决于平台,它们是硬编码的字符串)。

设置原生 logrotate

$ 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
}

查看笔记