J'aimerais que tous mes journaux aient un préfixe représentant l'origine du journal. Cette méthode crée plusieurs transports pour le même fichier, ce qui est évidemment un
var config = require('config')
var winston = require('winston')
var loggers = {}
function getLogger(moduleName) {
if (!loggers[moduleName]) {
loggers[moduleName] = createNewLogger(moduleName)
}
return loggers[moduleName]
}
function createNewLogger(moduleName) {
var logger = new winston.Logger()
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
logger.add(winston.transports.Console,
{
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
}
)
logger.add(winston.transports.DailyRotateFile,
{
filename: config.get('log.filename'),
level: config.get('log.level')
}
)
return logger
}
module.exports = getLogger
Je veux essentiellement tous mes journaux dans un seul fichier/console, mais avec un préfixe différent. Des idées?
Je crois que vous voulez ceci : https://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston
Merci pour cela! Je l'ai déjà vu, mais j'avais l'impression que les transports étaient recréés pour chaque enregistreur.
Par exemple le code suivant :
function getLogger(moduleName) {
console.log('Initializing logger for: ' + moduleName)
winston.loggers.add(moduleName, {
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
Console: {
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
},
DailyRotateFile: {
filename: config.get('log.filename'),
level: config.get('log.level')
}
})
return winston.loggers.get(moduleName)
}
Donnera Error: Transport already attached: console
Qu'est-ce que je fais de mal ?
Salut @indexzero ,
Je suis sur Winston 3.0.0
.
J'ai essayé cela aussi, je ne sais pas si c'est la bonne façon; fondamentalement, je veux un moyen plus simple de préfixer chaque message de journal ou d'attacher un champ par défaut pour chaque journal en fonction du module/de la fonction à partir duquel il est enregistré (pour certaines structures). Voici le code ( en suivant l'exemple dans la documentation ):
const loggers = {};
module.exports.getModuleLogger = (moduleName, methodName) => {
const categoryName = [moduleName, methodName].join(':');
if (!loggers[categoryName]) {
loggers[categoryName] = winston.loggers.add(categoryName, {
console: {
label: categoryName,
},
file: {
filename: './log/test.log',
label: categoryName,
},
});
}
return winston.loggers.get(categoryName);
};
Mais je reçois l'avertissement suivant :
[winston] Attempt to write logs with no transports {"message":"yolo","
level":"info"}
vous pouvez y parvenir en ajoutant un objet qui contient le champ "label" dans les paramètres de votre fonction log, exemple :
pour le format suivant :
const imLogFormat = printf(info => {
retourne ${info.timestamp} [${info.label}] ${info.level}: ${info.message}
;
});
vous pouvez faire ce qui suit :
logger.error('J'ai l'erreur suivante' + err, {label : "Class1"})
logger.error('J'ai l'erreur suivante' + err, {label : "Class2"})