在Express.js中使用Winston进行日志记录 - 如何针对不同的环境进行配置?

UpT*_*eek 4 logging node.js express winston

我已经开始使用Winston来记录我的node/express.js应用程序的错误和事件.

我还没想到的一件事是如何为不同的环境(开发/测试/生产)指定不同的Winston传输(或其他配置).例如,我想在开发环境中将所有内容记录到控制台,但在生产中使用不同的传输.

有人知道怎么做吗?

mik*_*ikl 7

据我所知,没有"标准"方法可以做到这一点,但你可能会这样做:

var myLogTransports = [];

if (process.env.NODE_ENV == 'production') {
  myLogTransports.push(new (winston.transports.File)({ filename: 'somefile.log' }));
}
else {
  myLogTransports.push(new (winston.transports.Console)({ level: 'error' })));
}

var logger = new (winston.Logger)({
  transports: myLogTransports,
});
Run Code Online (Sandbox Code Playgroud)

Winston现在支持动态添加记录器.有关详细信息,请参阅使用传输部分.原来的答案可以像这样重写:

var logger = new winston.Logger();

if (process.env.NODE_ENV == 'production') {
  logger.add(winston.transports.File, { filename: 'somefile.log' });
}
else {
  logger.add(winston.transports.Console, { level: 'error' });
}
Run Code Online (Sandbox Code Playgroud)