Node.js – 日志logging/使用摩根和温斯顿

我们使用morgan为了logging我们的快速转换:

  var morgan = require('morgan'); morgan('combined'); // a format string morgan(':remote-addr :method :url :uuid'); // a custom function morgan(function (req, res) { return req.method + ' ' + req.url + ' ' + req.uuid; }) 

另外,我们使用winston为了logging我们的其他日志logging:

  var winston = require('winston'); var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)({ level: 'info' }), new (winston.transports.File)({ filename: '/var/log/log-file.log' }) ] }); 

有什么办法可以将两台logging仪结合在一起吗? 现在的情况是,当winston写入/var/log/log-file.log时, morgan写给我的标准输出。

我希望logging器文件将结合从快速转换信息,并从我想要的其他信息( logger.info() )..

本文对你想要做的事情做出了很好的工作。

http://tostring.it/2014/06/23/advanced-logging-with-nodejs/

对于你的具体代码,你可能需要这样的东西:

 var logger = new winston.Logger({ transports: [ new winston.transports.File({ level: 'info', filename: './logs/all-logs.log', handleExceptions: true, json: true, maxsize: 5242880, //5MB maxFiles: 5, colorize: false }), new winston.transports.Console({ level: 'debug', handleExceptions: true, json: false, colorize: true }) ], exitOnError: false }), logger.stream = { write: function(message, encoding){ logger.info(message); } }; app.use(require("morgan")("combined", { "stream": logger.stream })); 

这将设置Winston将日志写入控制台以及文件。 然后,您可以使用最后一个expression式将来自摩根中间件的输出传递给winston。

更新最后一行以删除警告

 app.use(require("morgan")("combined", { stream: logger.stream })); 

在打字稿中:

 let logger = new (winston.Logger)({ exitOnError: false, level: 'info', transports: [ new (winston.transports.Console)(), new (winston.transports.File)({ filename: 'app.log'}) ] }) class MyStream { write(text: string) { logger.info(text) } } let myStream = new MyStream() app.use(morgan('tiny', { stream: myStream }));