nous utilisons morgan
pour enregistrer notre transformation express:
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;
})
En outre, nous utilisons winston
pour enregistrer nos autres journaux:
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-t-il un moyen de combiner les deux enregistreurs ensemble? la situation est maintenant d' morgan
écrire sur ma sortie standard, lors de l' winston
écriture dans /var/log/log-file.log
.
Je souhaite que le fichier logger se combine à partir des informations de transformation express et des autres informations que je veux ( logger.info()
) ..
Réponses:
Cet article fait un excellent travail pour ce que vous voulez faire.
http://tostring.it/2014/06/23/advanced-logging-with-nodejs/
Pour votre code spécifique, vous avez probablement besoin de quelque chose comme ceci:
Cela configurera Winston pour écrire un journal sur la console ainsi qu'un fichier. Ensuite, vous pouvez utiliser la dernière expression pour transmettre la sortie du middleware morgan à winston.
la source
app.use(morgan("combined", { stream: { write: message => logger.info(message) }}));
logger.info(message.trim())
winston: ^3.0.0
utiliser à lawinston.createLogger
place denew winston.Logger
En texte manuscrit:
la source
Mettez à jour la dernière ligne pour supprimer l'avertissement
la source
pour Typescript, une autre façon de procéder, sans avoir besoin de créer une classe est
Cette solution a été dérivée de cette page Github https://github.com/winstonjs/winston/issues/1385 . Cependant, il est important de noter qu'il existe une légère différence entre nos codes. Au lieu de:
J'utilise:
Cela m'a aidé car je ne suis pas trop gros dans la création de classes.
la source
Morgan a la mauvaise habitude de terminer le message avec un
\n
afin de mettre les choses en ordre, vous voudrez peut-être le supprimer avant de l'écrire dans winston.Cela peut être fait de différentes manières, comme du côté du format dans winston, ou en mettant à jour votre flux pour ne pas écrire le
\n
la source