私はSerilogためenricherを書いていると私は実際には、新しいログイベントをトリガしてプロパティを追加します:StackOverflowExceptionがEnricher
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
ISession session = /* HttpContext.Session */;
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("ValueFromSession", session.GetString("ValueFromSession")));
/* other properties ... */
}
Iから値を追加できるようにしたいです私のHTTPセッションはログに記録されているので、私はLogContext.PushProperties
をカスタムエンリージャで使用します。 ASP.NET Coreは期限切れのセッションが読み込まれるたびに警告を記録しますが、これはより豊かなトリガーとなりますが、エンリッチャのセッションから読み込もうとすると、期限切れのセッションについて警告して、 )。これにより、ブロックtry
でキャッチ可能ではないように見えるStackOverflowException
が発生します。
Enrich
メソッドでログを無効にする方法はありますか?または、何らかの形でこの種の再帰を検出できますか(スタックトレースの解析以外)?
慎重にチェックしてください循環参照があります – Mostafiz
質問に記載されているように、自分のコードとASP.NETの間に間接参照がありますが、セッションから読み込む必要があるため参照を削除できません。私は期限切れのセッションについて私に警告するASP.NETをしたい。 –
'Enrich()'からスローされた例外は、Serilogによって捕捉され、別のトップレベル例外ハンドラがトリガされることはありません。ここで起こっているかもしれない何かのように聞こえる。おそらく質問にスタックトレースを追加できますか?乾杯! –