node.js - Nodejs 与 PM2 和 Winston 合并日志

标签 node.js winston pm2

我想将所有信息仅记录在一个文件中。我正在使用 pm2 "0.12.1"和 "winston": "0.8.3"。

这是我的 winston 代码

var winston = require('winston');

var customLoggerLevels = {
  levels: {
    trace: 0,
    debug: 1,
    info: 2,
    warn: 3,
    error: 4
  },
  colors: {
    trace: 'blue',
    debug: 'green',
    info: 'grey',
    warn: 'yellow',
    error: 'red'
  }
};

var logger = new (winston.Logger)({
  levels: customLoggerLevels.levels
});

以及我的 Ecosystem.json 的一部分

 "apps" : [
    {
      "name"      : "myapp",
      "script"    : "server.js",
      "instances"  : "1",
      "err_file"    : "myapp.log",
      "out_file"    : "myapp.log",
      "env": {
        "NODE_ENV": "development",
        "PORT": 4000
      },
      "env_production" : {
        "NODE_ENV": "production",
        "PORT": 4000
      }
    }
  ]

这对我不起作用。我不明白为什么 pm2 仍然创建两个文件,一个用于输出,一个用于错误。我还想知道是否可以将文件放在生产中的另一个目录中。

谢谢

最佳答案

您可以在 out_fileerror_file 键中指定文件路径。 默认情况下,pm2 将 stdout 输出重定向到与 stderr 输出不同的文件。 如果您只想拥有一个日志文件,只需对两个输出使用相同的路径即可。

您的ecosystem.json将如下所示:

"apps" : [
    {
      "name"      : "myapp",
      "script"    : "server.js",
      "instances"  : "1",
      "error_file"    : "/var/log/myapp.log",
      "out_file"    : "/var/log/myapp.log",
      "env": {
        "NODE_ENV": "development",
        "PORT": 4000
      },
      "env_production" : {
        "NODE_ENV": "production",
        "PORT": 4000
      }
    }
  ]

还有一个选项可以合并每个实例的日志(不是合并/错误)。要使用它,请指定 merge_logs: true。它还允许您get rid of the pm2 id在日志文件名中。

关于node.js - Nodejs 与 PM2 和 Winston 合并日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27046888/

相关文章:

javascript - 在没有 HTTP 的情况下将结构化数据从 PHP 发送到 Node.js?

json - winston 日志格式

node.js - PM2 console.log 异步?

javascript - pm2 启动两个不同版本的重复进程

javascript - Node JS pm2最大内存限制

node.js - 为什么从工作线程发送日期对象作为消息会将其转换为字符串?

javascript - Node.js中的相对路径问题

node.js - 使用安全网关将 nodeJs 应用程序连接到本地服务器

javascript - 安装特定版本的winston包

node.js - 使用 winston Node 记录器记录具有日期和时间格式的 json