que usamos morgan
para registrar nossa transformação expressa:
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;
})
Além disso, usamos winston
para registrar nossos outros 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' })
]
});
Existe alguma maneira de combinar os dois madeireiros juntos? a situação agora é que morgan
é gravar na minha saída padrão, quando winston
grava em /var/log/log-file.log
.
Desejo que o arquivo logger se combine com as informações de transformação expressa e com as outras informações que desejo ( logger.info()
) ..
Respostas:
Este artigo faz um excelente trabalho para o que você deseja fazer.
http://tostring.it/2014/06/23/advanced-logging-with-nodejs/
Para o seu código específico, você provavelmente precisará de algo assim:
Isso configurará o Winston para gravar um log no console, bem como um arquivo. Em seguida, você pode usar a última expressão para passar a saída do middleware Morgan para o winston.
fonte
app.use(morgan("combined", { stream: { write: message => logger.info(message) }}));
logger.info(message.trim())
winston: ^3.0.0
usar emwinston.createLogger
vez denew winston.Logger
No texto datilografado:
fonte
Atualize a última linha para remover o aviso
fonte
para o Typescript, outra maneira de fazer isso, sem a necessidade de criar uma classe é
Esta solução foi obtida desta página do Github https://github.com/winstonjs/winston/issues/1385 . No entanto, é importante notar que há uma pequena diferença entre nossos códigos. Ao invés de:
Eu uso:
Isso me ajudou, pois não sou muito fã de criar classes.
fonte
Morgan tem o mau hábito de terminar a mensagem com um
\n
, para deixar as coisas em ordem, você pode querer removê-lo antes de escrever para o winston.Isso pode ser feito de muitas maneiras diferentes, como no lado do formato no winston, ou atualizando seu fluxo para não escrever o
\n
fonte