Node.jsアプリでWinstonロギングを使用しており、ファイルトランスポートを定義しています。コード全体を通して、logger.error
、logger.warn
、またはlogger.info
。
私の質問は、どのようにログレベルを指定するのですか?適切なログメッセージのみが記録されるように設定できる構成ファイルと値はありますか?たとえば、開発環境ではログレベルを「情報」にしたいのですが、本番環境では「エラー」にしたいです。
渡されたオプションにレベルオプションがあるように見えます here
そのドキュメントから:
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メソッドが公開されていることにも注意してください。そのドキュメントのログレベルの使用セクションをご覧ください。
winston = require('winston');
:
:
winston.level = 'debug';
ログレベルを「デバッグ」に設定します。 (winston 0.7.3でテスト済み)
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
、verbose
、およびinfo
はsomefile.logに出力されず、warn
、debug
およびerror
の意志。
独自のレベルを定義することもできます。
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つの定義済みレベルを常に含めることをお勧めします。
適切なトランスポートの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';
私は推測しますが、ファイルについても同様に機能しますが、私はそれを試していません。
その場でログレベルを変更したい場合。短期間で生産上の問題を追跡する必要がある場合など。その後、エラーログレベルに戻ります。 Webでサービスを公開できる場合は、動的ロガーを使用できます https://github.com/yannvr/Winston-dynamic-loglevel