How do I output Connect/Express's logger output to Winston?
Here is what i did to solve this very issue. Basically use the stream option in the connect/express logger module to pipe the messages through to winston. I chose to use winston.info logging level, use whatever level makes sense for you.
var winston = require('winston');var express = require('express');var app = express.createServer();// enable web server logging; pipe those log messages through winstonvar winstonStream = { write: function(message, encoding){ winston.info(message); }};app.use(express.logger({stream:winstonStream}));// now do the rest of your express configuration...
I had the same problem, I looked into the internals of the logger module and pretty much replicated what is there, in this custom middleware (warning, coffeescript).
As a bonus, it logs data using metadata fields as well.
(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()