【问题标题】:Can't merge the standard and error log in PM2无法合并 PM2 中的标准日志和错误日志
【发布时间】:2019-07-11 14:21:51
【问题描述】:

我正在尝试使用一个文件来保存所有日志,因此我正在使用

启动我的应用程序
pm2 start app --merge-logs -l --log "~/webapps/infranodus/infranodus/infralogpm2.log"

应用程序启动,但文件中没有任何内容,仅创建标准日志。

我尝试touch 创建文件,但这也无济于事。

【问题讨论】:

  • 使用集群还是单实例?
  • 单实例
  • 根据此评论 github.com/Unitech/pm2/issues/337#issuecomment-40677868 合并仅适用于实例以及我在帮助 merge logs from different instances 中看到的内容,因此对于单个实例,我认为用 bash 编写它会更好
  • 你怎么看?

标签: logging pm2


【解决方案1】:

我使用 NodeJS 10.15 和 PM2 3.2.4 并遵循 HelloWorld ExpressJS 代码对 RHEL 7.4 进行了几次检查。

var http = require("http");

http.createServer(function (request, response) {
    // Send the HTTP header 
    // HTTP Status: 200 : OK
    // Content Type: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // Send the response body as "Hello World"
    response.end('Hello World\n');
}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');
console.error('This is on STDERR');

假设上述代码在./bin/app2文件中,而所需模块在node_modules下,

我以pm2 start ./bin/app2 --merge-logs -l --log /var/tmp/sample-app2.log 和下面描述的其他组合运行应用程序。

  1. --merge-logs 不适用于单个实例。根据pm2 --help,它说“合并来自不同实例的日志,但保持错误并分开”。虽然在我的例子中,STDOUT 和 STDERR 都出现在所需的日志文件中,有和没有 --merge-logs 选项。

  2. -l--log 两者都不应使用。理想情况下,根据 Unix 命令行参数约定,您应该只使用其中一个。但是,就我而言,它的工作方式与您建议的方式相同,并且仅适用于 --log

  3. 作为计数器检查的一部分,运行pm2 start ./bin/app2 --output /var/tmp/sample-app2-stdout.log --error /var/tmp/sample-app2-error.log。它生成两个文件,分别从console.logconsole.error 输出。

对于你的情况,我建议你检查存储日志文件的分区上是否有足够的磁盘空间,然后pm2 delete app然后再试一次。

如果这不能解决问题,是否可以共享示例代码和重现问题的确切步骤?

【讨论】:

  • 非常感谢!关键是做pm2 delete app并使用--log参数重新启动它而不使用--merge-logs
猜你喜欢
  • 2015-01-18
  • 2016-01-16
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2016-08-03
  • 2018-02-28
相关资源
最近更新 更多