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