2013-03-20 18 views
25

私はnode.jsアプリケーションでwinston loggingを使用しており、ファイル転送を定義しています。私のコードでは、logger.errorlogger.warn、またはlogger.infoのいずれかを使用してログに記録します。Winston/Node.jsでログレベルを設定する方法は?

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

答えて

19

渡されたオプションでのレベルのオプションは、そのドキュメントからhere

をカバーしているように見える:

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

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

のようなものになるはずです。2.0のように、それは実行時に変更することでsetLevelメソッドを公開することも、そのドキュメント毎の

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

ノートは。その文書のセクションのログレベルを参照してください。

+1

bryanmac、返信ありがとう、私はまだ私の質問に答えていないと思います。私を明確にしましょう。以前の仕事では、ウィンストンと非常によく似たカスタムロギングモジュールを使用していました。モジュールは、ログレベルを設定する設定ファイルのエントリに依存していました。問題をデバッグする必要がある場合は、ログの冗長性を高めるためにconfigファイルのエントリを変更します。しかし、それ以外の時はエラーを記録するためにレベルを最低レベルに設定します。ウィンストンで可能なことはありますか? –

+1

上記のプログラムコードは、初期ログレベルを設定するためにログファイルから読み取ることができます。実行時にintial/defaultレベルから変更するには、先に触れたsetLevelメソッドを呼び出して呼び出すAPIを公開することができます。そうすれば、ログレベルを読み込む管理者ページとそれを設定する方法を持つことができます。 – bryanmac

+0

ブライアン、私はあなたの最初の答え+私の質問へのあなたのコメントを受け入れるつもりです。ありがとう。 –

7

ありウィンストン6つのデフォルトレベルである:愚か= 0(最低)、デバッグ= 1、冗長= 2、情報= 3は、ロガーのトランスポートを作成しながら= 4、エラー= 5(最高)

に警告出力はsomefile.logすることはないだろうsillyverboseinfoを意味warnにログレベルを設定するコードの上

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

、しばらくwarndebugerror意志:、次のようなログレベルを指定することができます。

また、独自のレベルを定義することができます。独自のカスタムレベルの6つの事前に定義されたレベルを常にが含まれるように、それはケースのどこかで事前に定義されたレベルを使用し、より良いです

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

注こと。あなたが適切な輸送のlevelプロパティを変更することによって、ランタイムでログレベルを変更することができます

+0

陳、あなたの答えをありがとう。私は上記のブライアンの答えを受け入れました。しかし、あなたもとても役に立ちました。 –

+3

申し訳ありませんが、@Chenは間違っています。デバッグは冗長ではありません。編集を提案しました。 –

+0

@filsmickそうです。私がこの答えを書いたとき、デバッグは冗長表示よりも高かったが、今は冗長表示が高い。 – Chen

3

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

私は推測する、それがファイルに対しても同様に動作しますが、私はそれを試していません。

32
winston = require('winston'); 
: 
: 
winston.level = 'debug'; 

は、ログレベルを「デバッグ」に設定します。 (winston 0.7.3でテスト済み)

+2

これは正解です。もう1つは新しいロガーの作成を必要とし、winstonによって作成された既存のデフォルトロガーの設定は調整しないでください。 –

0

オンザフライでログレベルを変更したい場合。短時間で生産問題を追跡する必要がある場合と同様です。エラー・ログ・レベルに戻ります。あなたは動的ロガーを使用して、ウェブ上でサービスを公開することができます。https://github.com/yannvr/Winston-dynamic-loglevel

関連する問題