Winston: Teilen des gleichen Transports mit verschiedenen Labels

Erstellt am 30. Okt. 2015  ·  4Kommentare  ·  Quelle: winstonjs/winston

Ich möchte, dass alle meine Protokolle ein Präfix haben, das angibt, woher das Protokoll stammt. Auf diese Weise werden mehrere Transporte für dieselbe Datei erstellt, was offensichtlich eine ist

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

Ich möchte im Grunde alle meine Protokolle in einer einzigen Datei/Konsole, aber mit einem anderen Präfix. Irgendwelche Ideen?

Alle 4 Kommentare

Ich glaube, Sie wollen das: https://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston

Danke dafür! Ich habe es schon einmal gesehen, aber ich hatte den Eindruck, dass die Transporte für jeden Holzfäller neu erstellt wurden.

Zum Beispiel der folgende Code:

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)

}

Wird Error: Transport already attached: console geben

Was mache ich falsch?

Hallo @indexzero ,

Ich bin auf winston 3.0.0 .

Ich habe das auch versucht, unsicher, ob das der richtige Weg ist; Grundsätzlich möchte ich eine einfachere Möglichkeit, jeder Protokollnachricht ein Präfix voranzustellen oder ein Standardfeld für jedes Protokoll basierend auf dem Modul / der Funktion anzuhängen, von dem es protokolliert wird (für eine gewisse Struktur). Dies ist der Code ( nach dem Beispiel in der Dokumentation ):

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

Aber ich bekomme folgende Warnung:

[winston] Attempt to write logs with no transports {"message":"yolo","
level":"info"}

Sie können dies erreichen, indem Sie ein Objekt hinzufügen, das das Feld "Label" in den Parametern Ihrer Protokollfunktion enthält, Beispiel:
für folgendes Format:

const imLogFormat = printf(info => {
gebe ${info.timestamp} [${info.label}] ${info.level}: ${info.message} zurück;
});

Sie können Folgendes tun:

logger.error('Ich habe folgenden Fehler' + err, {label: "Class1"})
logger.error('Ich habe folgenden Fehler' + err, {label: "Class2"})

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

mohanen picture mohanen  ·  4Kommentare

kjin picture kjin  ·  3Kommentare

jlank picture jlank  ·  4Kommentare

tagyoureit picture tagyoureit  ·  4Kommentare

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ·  3Kommentare