pm2下的自定义日志记录

custom logging under pm2

我在写入 console.log

的节点应用程序中有一些有用的日志记录
node server.js >> /var/log/nodeserver.log 2>&1

然而,当在 pm2 下尝试相同时:

pm2 start server.js >> /var/log/pm2server.log 2>&1

日志文件只显示pm2启动信息

是否可以使用 pm2 进行应用程序日志记录?在他们的页面上,他们讨论了日志记录,并显示了带有 "log message from echo.js" 之类文本的图像,但我看不到有关将自定义信息输入 pm2 日志的任何信息。

当 运行 pm2 时,您的应用程序日志将驻留在 $HOME/.pm2/logs 中,如 here 所述。使用输出 console.log('test')

的简单 index.js 文件在本地验证这一点
$ pm2 start index.js
[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting index.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬────────────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ memory     │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼────────────┼──────────┤
│ index    │ 0  │ fork │ 36976 │ online │ 0       │ 0s     │ 9.258 MB   │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

请注意我在这里没有看到 console.log 输出, 但是 ,如果我导航到 $HOME/.pm2/logs 我会看到

logs $ ls
index-error-0.log   index-out-0.log

logs $ cat index-out-0.log
test

一个漂亮的功能是在终端中使用 logs 功能:

pm2 logs [--raw]

这将直播所有日志。其他方便的命令是:

  • pm2 flush
  • pm2 reloadLogs

2017年更新

在执行pm2命令时将日志路径定义为参数(-l-o-e)非常好用,通常是最好的选择。

但是,如果你不想每次执行pm2时都定义日志路径,你可以生成一个配置文件,定义error_fileout_file,然后从中启动pm2:

  1. 生成配置文件:pm2 ecosystem simple。这将生成一个文件 ecosystem.config.js,内容如下:

    module.exports = {
      apps : [{
        name   : "app1",
        script : "./app.js"
      }]
    }
    
  2. 在文件中定义error_file(错误日志)和out_file(信息日志),如:

    module.exports = {
      apps : [{
        name   : "app1",
        script : "./app.js",
        error_file : "./err.log",
        out_file : "./out.log"
      }]
    }
    
  3. 从配置文件启动进程:

    pm2 start ecosystem.config.js
    

这样,日志就保存到./err.log./out.log.

详情请参考document

如果是新的开始,你只需:

  • 运行 pm2 start/reload ecosystem.config.js [--only your_app]

但是当它已经启动时(pm2 已经在管理它)你必须做(有人可以找到更好的方法,但这对我有用):

  • 运行 pm2 delete your_app
  • 运行 pm2 start