que usamos morganpara 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 winstonpara 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 morganse escribe en mi salida estándar, cuando se winstonescribe 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.0usar enwinston.createLoggerlugar denew winston.LoggerEn 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
\nasí 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
\nfuente