如何将Connect / Express的logging器输出输出到Winston?

我正在做一个Node.js应用程序,我正在使用Winston的大部分日志logging目的。 我也知道连接/ Expresslogging器function,并知道它有一个stream选项…是否有可能从Connect / Express的logging器function输出到温斯顿的东西? 那么我可以拥有我需要的所有有用的日志logging?

我发现Connect / Express的日志loggingfunction非常有用,但目前这两种方式是分开的……我宁愿把它全部通过Winston运行,而且是运输方式。

这怎么可能? 谢谢,詹姆斯

这是我做了什么来解决这个问题。 基本上使用连接/快速logging器模块中的stream选项将消息传递给winston。 我select使用winston.info日志logging级别,使用任何级别对​​您有意义。

var winston = require('winston'); var express = require('express'); var app = express.createServer(); // enable web server logging; pipe those log messages through winston var winstonStream = { write: function(message, encoding){ winston.info(message); } }; app.use(express.logger({stream:winstonStream})); // now do the rest of your express configuration... 

我有同样的问题,我看了logging模块的内部,并在这个自定义中间件(警告,咖啡标记)几乎复制了什么。

作为奖励,它也使用元数据字段logging数据。

 (req, res, next) -> sock = req.socket req._startTime = new Date req._remoteAddress = sock.socket && sock.socket.remoteAddress || sock.remoteAddress; _url = () -> req.originalUrl || req.url _method = () -> req.method _respTime = () -> String(Date.now() - req._startTime) _status = () -> res.headerSent && res.statusCode || null _remoteAddr = () -> req.ip || req._remoteAddress || (req.socket?.socket? && req.socket.socket.remoteAddress) || req.socket.remoteAddress _usrAgent = () -> req.headers['user-agent'] logRequest = () -> res.removeListener 'finish', logRequest res.removeListener 'close', logRequest winston.info "#{_method()} #{_url()} #{_status()} #{_remoteAddr()} #{_usrAgent()} #{_respTime()}", http_access: method: _method() url: _url() status: _status() remote_address: _remoteAddr() user_agent: _usrAgent() res.on 'finish', logRequest res.on 'close', logRequest next()