web-dev-qa-db-fra.com

Comment configurer le niveau de journalisation dans Winston/Node.js?

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.

26
Silent User

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.

20
bryanmac
winston = require('winston');
:
:
winston.level = 'debug';

définira le niveau de journalisation sur 'debug'. (Testé avec winston 0.7.3)

33
AndreasPizsa

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.

7
Chen

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é.

3
weekens

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

0
Yann VR