8

場合によっては、メッセージ テンプレートに含めることなく、コンテキスト情報をメッセージ(たとえば、現在認証されているユーザー)に追加したいと考えています。

私はこれを達成したいと思います:

logger.Information("Doing stuff {Foo} with the thing {Bar}. {User}", foo, bar, user)

ただし{User}、テンプレートにはありません。

私はすでに知ってLogContextいますが、コンテキスト情報を 1 つのイベントだけに追加する場合、それはやり過ぎのように思えます。

また、どのプロパティを含めるかを実際に制御するために低レベル API を使用できることも知ってlogger.Write(LogEvent evnt)いますが、これは私が達成しようとしているコードに対して少し多すぎるように思えます。

非常に明白な短くてエレガントな方法があると確信していますが、私はそれを見つけていません:)

アップデート :

この質問が多かれ少なかれ似ていることを後で初めて知りました: Add custom properties to Serilog

4

2 に答える 2

8

私は自分でそれを理解することができました!

.ForContext(propertyName, propertyValue)いずれかのメソッドへの 1 回の呼び出しで流暢なメソッドを使用できます.LogXXX()

例えば ​​:

logger.ForContext("User", user)
      .Information("Doing stuff {Foo} with the thing {Bar}", foo, bar)

イベントに追加されたプロパティはイベントにのみ適用され、logger.LogXXX()メソッドの次の呼び出しでは存在しなくなります

アップデート

Nicholas Blumhardt の記事では、それについて非常によく説明されています:コンテキストと相関 – .NET における構造化ログの概念 (5)

于 2015-06-04T08:46:19.253 に答える