Winston: ログレベルを動的に変更するためのより良い方法

作成日 2017年10月19日  ·  4コメント  ·  ソース: winstonjs/winston

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!");

ウィンストン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!');

このように作成した場合、3.0でレベルを変更するにはどうすればよいですか?
var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)({ level: 'warn' }), new (winston.transports.File)({ filename: 'somefile.log', level: 'error' }) ] });


以前のバージョンの動的レベル変更メカニズムが新しいバージョンよりもはるかに優れていることは明らかではありませんか。

duplicate

全てのコメント4件

上記と同様に、winston3.xのソリューションも探しています

winston.create()関数の外部にトランスポートがあり、外部から変更したところ、機能しました。

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'

#1191の複製として閉じます。 これはロードマップにあり、2018年5月29日に[email protected]がリリースされる前に修正される予定です。

これは私にとってはうまくいきました。ロガーオブジェクトに直接アクセスできないため、refを介してアクセスできるように、各トランスポートに名前を付けました。
`

    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';

`

このページは役に立ちましたか?
0 / 5 - 0 評価