2017-11-01 4 views
2

文字列以外のデータをoutputingない:SeriLogは、私はちょうど、コア2のWebアプリでSeriLogを使い始めることだし、私のコントローラにサンプルコードを貼り付けている

_logger.LogInformation("Before"); 

    using (_logger.BeginScope("Some name")) 
    using (_logger.BeginScope(42)) 
    using (_logger.BeginScope("Formatted {WithValue}", 12345)) 
    using (_logger.BeginScope(new Dictionary<string, object> { ["ViaDictionary"] = 100 })) 
    { 
     _logger.LogInformation("Hello from the Index!"); 
     _logger.LogDebug("Hello is done"); 
    } 

    _logger.LogInformation("After"); 

が、出力は平坦ではない行を排除しますテキスト:

2017-11-01 14:53:19.587 -05:00 [Information] Before 
2017-11-01 14:53:19.588 -05:00 [Information] Hello from the Index! 
2017-11-01 14:53:19.588 -05:00 [Debug] Hello is done 
2017-11-01 14:53:19.588 -05:00 [Information] After 

一方で、それはちょっと理にかなっていますが、なぜreposサンプルコードにそれを組み込むのですか?

答えて

2

BeginScopeは、含まれているメッセージに関連付けられたScopeオブジェクトにメタデータを追加します。

あなたはdiscussion in SeriLog's issues listごとに、渡された値を参照するoutputTemplateを変更する必要があります(

.WriteTo.LiterateConsole(outputTemplate: 
    "{Timestamp:o} [{Level:u3}] {Scope} {Message}{NewLine}{Exception}") 

また、あなたがBeginScopeに実質的に何を渡すことができるからといってhow Scope is affected by the values passed to BeginScope

上の発言を注意してください)必ずしもすべきではありません。プロバイダが最も有用な情報を取得することは重要です。したがって、この記事では診断補助として、階層スコープ名ではなく辞書スコープ値を賢明に使用するように強く配慮しています。

構造化されたキー/値プロパティは、自己文書化され、クエリが簡単です。 OrderId = 54のようなログフィルターは簡単に作成できます。 Scope [?] = 'メッセージのダウンロード'は意味のある一連のイベントを取得する可能性がありますが、Scope [0] = 42は単なるナンセンスです。

もちろん、柔軟性があるので、あなたに最も合った方法でAPIを使用する必要があります:-)。

+2

'{Scope}'ではなく、{{Properties} 'を出力テンプレートに含めることもできます。これは 'Scope'が存在するときだけでなく、引用された段落で提案された他のキー値のプロパティも表示します。乾杯! :-) –

関連する問題