NLogでMDLCの利点を最大限に活用するには、ログでデバッグするときに後で識別する必要があるすべてのオブジェクトのinitメソッドでMDLCパラメータを設定しようとしています。NLog異なるロガーのレイアウト
たとえば、あるFoo()
メソッドを持つA
クラスがあります。logger.Debug('Foo method started')
のようなものがあります。あるオブジェクトがFoo()
メソッドasyncを実行しているので、私はこのタスクのためにいくつかのMDLCパラメータを持っています。例えば、MappedDiagnosticsLogicalContext.Set("A_Id", this.id);
です。
B
クラスがあり、Bar()
メソッドがあり、logger.Debug('Bar method started')
を記録します。また、B
オブジェクトを特定するか、ログ呼び出しごとに同じパラメータを必要とするだけで、MappedDiagnosticsLogicalContext.Set("B_Id", this.id);
があります。
<Logger/>
にはLayout
の固有性がありません。 <Target/>
にのみあります。 だから私はロガークラスに基づいて、このMDLC paramsはを含めるための3つの方法を参照してください。複数のターゲット(各ロガーの1)と同じでを持つために
<variable name="optional" value="${aParams}${when:when=equals('${logger}','App.B'):inner=|${mdlc:item=B_id}}"/>
<target layout="${optional}"
fileName="logs.txt"
name="f"
xsi:type="File"/>
:when
構造の連鎖
をファイル名。本当に合法であるかどうかはわかりませんが、私が覚えているようにどこかでそれを見ました。
<target layout="${mdlc:item=A_id}" fileName="logs.txt" name="f" xsi:type="File"/> <target layout="${mdlc:item=B_id}" fileName="logs.txt" name="f" xsi:type="File"/>
A
クラスのMappedDiagnosticsLogicalContext.Set("Param", this.id);.
とB
クラスのMappedDiagnosticsLogicalContext.Set("Param", this.id);
ようMDLCのPARAMを共有していると。<target layout="${mdlc:item=Param}" fileName="logs.txt" name="f" xsi:type="File"/>
3つ目は実装するのが最も簡単に見えますが、これはpreferrableの方法である場合、私はどんな理由が辞書を持っているし、どこでも1つのキーだけを使用するように表示されません。だから、それを行うための簡単な方法があるのか、あるいはそれが好ましいのだろうか?