J'utilise winston logging avec mon application node.js et ai défini un transport de fichier. Tout au long de mon code, je me connecte à l'aide de logger.error
, logger.warn
ou logger.info
.
Ma question est, comment puis-je spécifier le niveau de log? Existe-t-il un fichier de configuration et une valeur que je peux définir pour que seuls les messages de journal appropriés soient consignés? Par exemple, j'aimerais que le niveau de journalisation soit "info" dans mon environnement de développement mais "erreur" en production.
On dirait qu'il existe une option de niveau dans les options passées couvertes ici
À partir de ce doc:
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: 'error' }),
new (winston.transports.File)({ filename: 'somefile.log' })
]
});
Maintenant, ces exemples montrent le niveau de passage de l'objet option au transport de la console. Lorsque vous utilisez un transport de fichier, je pense que vous transmettez un objet options qui contient non seulement le chemin du fichier, mais également son niveau.
Cela devrait conduire à quelque chose comme:
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
]
});
Selon ce document, notez également qu'à partir de 2.0, il expose une méthode setLevel à modifier au moment de l'exécution. Regardez dans la section Using Log Levels de ce document.
winston = require('winston');
:
:
winston.level = 'debug';
définira le niveau de journalisation sur 'debug'. (Testé avec winston 0.7.3)
Il y a 6 niveaux par défaut dans winston: idiot = 0 (le plus bas), debug = 1, verbose = 2, info = 3, avertir = 4, erreur = 5 (le plus élevé)
Lors de la création des transports de consignateurs, vous pouvez spécifier le niveau de journalisation comme suit:
new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })
Le code ci-dessus définit le niveau de journalisation sur warn
, ce qui signifie que silly
, verbose
et info
ne seront pas générés dans un fichier file.log, alors que warn
, debug
et error
.
Vous pouvez également définir vos propres niveaux:
var myCustomLevels = {
levels: {
foo: 0,
bar: 1,
baz: 2,
foobar: 3
}
};
var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels });
customLevelLogger.foobar('some foobar level-ed message');
Notez qu'il est préférable de toujours inclure les 6 niveaux prédéfinis dans vos propres niveaux personnalisés, au cas où quelque part utilisé les niveaux prédéfinis.
Vous pouvez modifier le niveau de journalisation au moment de l'exécution en modifiant la propriété level
du transport approprié:
var log = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level : 'silly' })
]
});
...
// Only messages with level 'info' or higher will be logged after this.
log.transports.Console.level = 'info';
Je suppose que cela fonctionne de la même manière pour le fichier, mais je n'ai pas essayé.
Si vous souhaitez modifier le niveau de journalisation à la volée. Comme lorsque vous devez tracer le problème de production pendant une courte période; puis revenir au niveau du journal des erreurs. Vous pouvez utiliser un enregistreur dynamique à condition que vous puissiez exposer un service sur le Web https://github.com/yannvr/Winston-dynamic-loglevel