2016-10-23 8 views
2

私はSerilogを現在使用しています。クラスをロガーに渡して、テキストファイルに出力する前にカスタムフォーマットでログインできるようにしたいと考えています。 IFormatProviderと多少似ています。私はITextFormatterも見つけましたが、それが実装するのが正しいかどうかはわかりません。カスタムシンクが必要ですか?クラスのカスタムフォーマット

答えて

3

プリミティブ型については、Serilog supports IFormatProviderを直接ご使用ください。

しかし、ほとんどのユーザー定義参照型は、Serilogによってシンクに直接渡されません。これは、シンクが非同期で動作することが多く、Serilogは任意のユーザ定義型がスレッドセーフであると想定できないためです。どんな二次表現に

.Destructure.AsScalar<SomeClass>() 

あるいは、あなたが「destructure」缶クラスあなたは:

あなたはこれを回避することができ、「スカラー」とタイプの値をキャプチャすることにより、IFormatProviderを使用するために、伐採時に欲しい:オブジェクトがログに記録されたときに、このために

.Destructure.ByTransforming<SomeClass>(sc => Display(sc)) 

ByTransforming())動作するように、あなたはオプトインする@で必要があります。

Log.Information("Hello {@Something}", new SomeClass()); 

最も簡単なのは、クラス自体でToString()を上書きすることもできます。

+0

フォローアップの質問。 destructionの例を使用するか、ToStringを上書きする場合は、log.Error( "{myObj}"、myObj)を使用してオブジェクトを自分のログに追加するだけです。私は期待した結果を見なければなりませんか? – Questioning

+1

はい、そうです。 –

関連する問題