sirve que para nodejs node logger node.js logging express connect

node.js - nodejs - para que sirve morgan node



¿Cómo envío la salida del registrador de Connect/Express a Winston? (2)

Estoy haciendo una aplicación Node.js y estoy usando Winston para la mayoría de mis propósitos de registro. También estoy al tanto de la función de registrador Connect / Express y sé que tiene una opción de transmisión ... ¿Es posible enviar todo desde la función de registrador de Connect / Express a Winston? ... entonces puedo tener todo el registro útil que necesito?

Me parece útil la conexión que Connect / Express, pero en este momento los dos están separados ... Preferiría tener todo corriendo por Winston y sus transportes.

¿Cómo es eso posible? Gracias, James


Esto es lo que hice para resolver este mismo problema. Básicamente, use la opción de transmisión en el módulo de conexión / registro express para canalizar los mensajes a winston. Elegí usar el nivel de registro winston.info, use cualquier nivel que tenga sentido para usted.

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...


Tuve el mismo problema, investigué las partes internas del módulo logger y prácticamente repliqué lo que hay allí, en este middleware personalizado (warning, coffeescript).

Como beneficio adicional, también registra datos usando campos de metadatos.

(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()