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 }));