PM2 - 如何从日志文件名中删除标识符

PM2 - How can i remove the identifier from the log file name

我正在尝试从日志文件名中删除服务标识符。

示例:

我的 ecosystem.config.js 看起来像这样:

module.exports = {
  apps : [
    {
        name: "My Service",
        script: "./app.js",
        watch: true,
        max_memory_restart: "150M",
        error: "/var/log/pm2/my-service.log",
        out: "/var/log/pm2/my-service.log",
        max_restarts: 10
    }
  ]
}

然后,我期待一个名为:/var/log/pm2/my-service.log.

的日志文件

但这就是它生成的内容:/var/log/pm2/my-service-4.log

我使用的是 pm2 版本 3.5.0,我刚刚从版本 2.10.4

升级了它

节点版本:v8.16.0

更新 1:

我也尝试过使用不同的参数,例如 merge_logs,这是该版本的示例:

module.exports = {
  apps : [
    {
        name: "My Service",
        script: "./app.js",
        watch: true,
        max_memory_restart: "150M",
        error: "/var/log/pm2/my-service.log",
        out: "/var/log/pm2/my-service.log",
        max_restarts: 10,
        merge_logs: true
    }
  ]
}

更新 2:

似乎 pm2 完全忽略了我在 erroroutput 选项中设置的内容。 我尝试将这些选项更改为 error_fileout_file,然后使用 pm2 reloadLogs 重新加载日志,但没有用。

您的应用似乎使用了日志后缀。见 pm2 documentation here.

You can disable automatic ID suffixs on logs (e.g. app-name-ID.log) by passing enabling the option merge_logs: true

因此,您的 env 文件应如下所示:

module.exports = {
  apps : [
    {
        name: "My Service",
        script: "./app.js",
        watch: true,
        max_memory_restart: "150M",
        error: "/var/log/pm2/my-service.log",
        out: "/var/log/pm2/my-service.log",
        max_restarts: 10,
        merge_logs: true
    }
  ]
}

我已经找到了解决方案。

看起来 pm2 正在缓存生态系统文件,一旦启动它就会完全忽略文件上的更改。

要使 pm2 重新加载所有配置,您必须删除所有服务并重新启动它们。

这是我所做的:

pm2 delete all
pm2 startOrRestart ecosystem.config.js

执行此操作后,它重新加载配置并开始写入正确的文件。