Winston: Partage du même transport avec différentes étiquettes

Créé le 30 oct. 2015  ·  4Commentaires  ·  Source: winstonjs/winston

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?

Tous les 4 commentaires

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"})

Cette page vous a été utile?
0 / 5 - 0 notes