29

Node.jsアプリでWinstonロギングを使用しており、ファイルトランスポートを定義しました。コード全体で、、、またはのいずれかを使用してログに記録logger.errorlogger.warnますlogger.info

私の質問は、ログレベルを指定するにはどうすればよいですか?適切なログメッセージのみがログに記録されるように設定できる構成ファイルと値はありますか?たとえば、ログレベルを開発環境では「情報」にし、本番環境では「エラー」にします。

4

5 に答える 5

35

デフォルトの loggerを使用している場合は、次のようにログ レベルを調整できます。

const winston = require('winston');
// ...
winston.level = 'debug';

ログレベルを「debug」に設定します。(winston 0.7.3 でテスト済み。デフォルトのロガーは 3.2.1 のままです)。

ただし、ドキュメントでは、適切なログ レベルで新しいロガーを作成し、そのロガーを使用することを推奨しています。

const myLogger = winston.createLogger({
  level: 'debug'
});
myLogger.debug('hello world');

コード ベースで既定のロガーを既に使用している場合は、すべての使用箇所を、使用しているこの新しいロガーに置き換える必要がある場合があります。

const winston = require('winston');
// default logger
winston.log('debug', 'default logger being used');

// custom logger
myLogger.log('debug', 'custom logger being used');
于 2014-04-08T10:41:56.200 に答える
25

ここでカバーされている渡されたオプションにレベルオプションがあるようです

そのドキュメントから:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ level: 'error' }),
    new (winston.transports.File)({ filename: 'somefile.log' })
  ]
});

これらの例は、オプション オブジェクトのレベルをコンソール トランスポートに渡すことを示しています。ファイル トランスポートを使用する場合、ファイル パスだけでなくレベルも含むオプション オブジェクトを渡すと思います。

それは次のようなものになるはずです:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
  ]
});

そのドキュメントによると、2.0以降、実行時に変更するsetLevelメソッドが公開されていることにも注意してください。そのドキュメントの「ログ レベルの使用」セクションを参照してください。

于 2013-03-20T23:08:53.053 に答える
8

winston には 6 つのデフォルト レベルがあります: silly=0(最低)、debug=1、verbose=2、info=3、warn=4、error=5(最高)

ロガー トランスポートの作成中に、次のようなログ レベルを指定できます。

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' })

上記のコードは、ログ レベルを に設定します。これは、warnを意味しsilly、 somefile.logには出力さverboseinfoません。warndebugerror

独自のレベルを定義することもできます:

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

どこかで事前定義されたレベルが使用されている場合に備えて、独自のカスタム レベルに常に 6 つの事前定義されたレベルを含めることをお勧めします。

于 2013-03-21T03:58:56.240 に答える
3

level適切なトランスポートのプロパティを変更することで、実行時にログ レベルを変更できます。

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

ファイルでも同様に機能すると思いますが、試したことはありません。

于 2014-03-18T11:14:12.730 に答える
0

その場でログレベルを変更したい場合。生産上の問題を短時間追跡する必要がある場合など。その後、エラー ログ レベルに戻ります。Web https://github.com/yannvr/Winston-dynamic-loglevelでサービスを公開できる場合は、動的ロガーを使用できます。

于 2014-08-07T14:57:06.710 に答える