2

Seq で Serilog を使用しており、Seq に表示されるログを独自のプロパティで強化したいと考えています。

次のようなログステートメントを入力すると...

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

Seqで私は得る...

ここに画像の説明を入力

Site と Activity の値は、Seq で強化されたプロパティとして表示されますが、メッセージ全体にも表示されることに注意してください。

強化されたプロパティを取得した場所をログに記録する方法はありますが、テキスト メッセージ行に値が表示されませんか? 各呼び出しに ThreadId を追加する NuGet パッケージがあることに注意してください。Site プロパティと Activity プロパティを強化された props のリストに含めたいのですが、必ずしもメッセージ行に出力する必要はありません。

これに対する答えには、アプリケーションの理解も必要になる場合があります。

アプリケーションは、さまざまなことを行う複数のアクティビティを生成する Windows サービスです。そのため、Windows サービスは、そこに含まれるさまざまなアクティビティを調整します。スケジュールでは、各アクティビティで「プロセス」を呼び出して、作業を開始します。Process がオーケストレーターによって呼び出されるたびに、上記のようにサイトとアクティビティの値を自動的に含めるために、そのアクティビティによるすべてのログが必要です (さらに多くのプロパティ値と共に、メッセージ行にすべてを出力したくはありません)。

したがって、上記のエントリの代わりに、次のように表示されます... メッセージが「ProcessCycle」とだけ表示されていることに注意してください。

ここに画像の説明を入力

4

1 に答える 1

5
Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

次のように変更する必要があります。

Log.ForContext("Site",SiteName)
    .ForContext("Activity",ActivityName)
    .Information("ProcessCycle")

あなたが望むようにレンダリングする。

Enrich.FromLogContextよりグローバルに実行するために doと doを実行することもできますLogContext.PushProperty(例を見つけるには、これら 2 つの文字列を検索してください)。

ジョン・リバモアによって追加されました

FromLogContext およびその他のメソッドの詳細については、 https ://nblumhardt.com/2016/08/context-and-correlation-structured-logging-concepts-in-net-5/ を参照して ください。

FromLogContext は、後続のロギング呼び出しのスコープで使用できる ILogger を作成します。

于 2018-11-15T22:25:10.670 に答える