Nodejs将日志与PM2和Winston合并

时间:2014-11-20 18:28:55

标签: 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
});

和我的一个生态系统.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仍会创建一个用于输出的文件和一个用于错误的文件。另外我想知道是否可以将文件放在生产中的另一个目录中。

谢谢

1 个答案:

答案 0 :(得分:4)

您可以在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