que usamos morgan
para registrar nuestra transformación expresa:
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;
})
Además, usamos winston
para registrar nuestros otros registros:
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' })
]
});
¿Hay alguna forma de combinar los dos registradores? la situación ahora es que morgan
se escribe en mi salida estándar, cuando se winston
escribe en /var/log/log-file.log
.
Deseo que el archivo del registrador se combine a partir de la información de transformación expresa y de la otra información que quiero ( logger.info()
) ..
Respuestas:
Este artículo hace un excelente trabajo para lo que quiere hacer.
http://tostring.it/2014/06/23/advanced-logging-with-nodejs/
Para su código específico, probablemente necesite algo como esto:
Esto configurará Winston para escribir un registro en la consola, así como un archivo. Luego, puede usar la última expresión para pasar la salida del middleware morgan a winston.
fuente
app.use(morgan("combined", { stream: { write: message => logger.info(message) }}));
logger.info(message.trim())
winston: ^3.0.0
usar enwinston.createLogger
lugar denew winston.Logger
En mecanografiado:
fuente
Actualice la última línea para eliminar la advertencia
fuente
para TypeScript, otra forma de hacerlo, sin necesidad de crear una clase es
Esta solución se obtuvo de esta página de Github https://github.com/winstonjs/winston/issues/1385 . Sin embargo, es importante tener en cuenta que existe una ligera diferencia entre nuestros códigos. En vez de:
Yo suelo:
Esto me ayudó, ya que no soy demasiado bueno para crear clases.
fuente
Morgan tiene el mal hábito de terminar el mensaje con un
\n
así que para hacer las cosas ordenadas, es posible que desee eliminarlo antes de escribirlo a winston.Esto se puede hacer de muchas formas diferentes, como en el lado del formato en winston, o actualizando su flujo para no escribir el
\n
fuente