Winston: Bessere Möglichkeit, die Protokollebene dynamisch zu ändern

Erstellt am 19. Okt. 2017  ·  4Kommentare  ·  Quelle: winstonjs/winston

Gemäß Winstons Dokumentation

Sie können den Log-Level eines Transports auch dynamisch ändern:

Winston 2.x

  var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)({ level: 'warn' }),
      new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
    ]
  });
  logger.debug("Will not be logged in either transport!");
  logger.transports.console.level = 'debug';
  logger.transports.file.level = 'verbose';
  logger.verbose("Will be logged in both transports!");

Winston 3.x

const transports = {
  console: new winston.transports.Console({ level: 'warn': level: 'warn' }),
  file: new winston.transports.File({ filename: 'combined.log', level: 'error' })
};

const logger = winston.createLogger({
  transports: [
    transports.console,
    transports.file
  ]
});

logger.info('Will not be logged in either transport!');
transports.console.level = 'info';
transports.file.level = 'info';
logger.info('Will be logged in both transports!');

Wie kann ich das Level in 3.0 ändern, wenn ich so erstellt habe?
var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)({ level: 'warn' }), new (winston.transports.File)({ filename: 'somefile.log', level: 'error' }) ] });


Ist es nicht offensichtlich, dass die vorherige Version des dynamischen Level-Change-Mechanismus viel besser ist als die neue.

duplicate

Alle 4 Kommentare

Ich suche auch nach der Lösung für Winston 3.x ähnlich wie oben

Ich hatte die Transporte außerhalb der Funktion winston.create() und änderte von außen, es funktionierte!

var transportsList =  const transports = {
  console: new winston.transports.Console({ level: 'warn': level: 'warn' }),
  file: new winston.transports.File({ filename: 'combined.log', level: 'error' })
};
var logger = new (winston.Logger)({
  transports: transportsList
});

//Then change below
transportsList.console.level = 'silly'

Schließt als Duplikat von #1191. Dies steht auf unserer Roadmap und wird behoben, bevor [email protected] am 29. Mai 2018 veröffentlicht wird.

Das hat bei mir funktioniert, ich habe jedem Transport einen Namen gegeben, der mit dem Namen verschlüsselt ist, damit ich über ref darauf zugreifen kann, da das Logger-Objekt nicht direkt zugänglich ist.
`

    var self = this;
    self.logger = self.winston.createLogger({
            levels:self.winston.config.syslog.levels
            ,transports:
                [
                    new self.winston.transports.Console({
                        level: self.config.console.level.ref
                        ,formatter: self._consoleLogFormatter
                        ,name: 'console'
                    })
                ]
        });

        self.transports = _.keyBy(self.logger.transports,"name");
        self.transports.console.level = 'info';

`

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

anks333 picture anks333  ·  3Kommentare

bertolo1988 picture bertolo1988  ·  3Kommentare

alditis picture alditis  ·  3Kommentare

kjin picture kjin  ·  3Kommentare

ghost picture ghost  ·  4Kommentare