2016-09-16 18 views
3

私はログフレームワークとしてSerilogを使用しています(ログシンクとしてSeqを使用しています)。例外をログに記録するとき、私は次のようなものを使用しています:serilogを使用して例外出力をカスタマイズする方法

log.Error(ex, "Operation Failed"); 

私のアプリケーションでは、非同期/待機メソッドが多用されています。未処理の例外が発生すると、スタックトレースは非常に読みにくくなります。非同期スタックトレース(https://github.com/aelij/AsyncFriendlyStackTrace)をクリーンアップするナゲットパッケージがあります。これは、あなたが変更/クリーンスタックトレースへのアクセスを提供するために拡張メソッドを作成します。

ex.ToAsyncString() 

は私がログインする代わりに、それを配列に書き込まれる前にスタックトレースを傍受するために、このライブラリを使用してできるようにしたいと思いますクリーン/修正スタックトレース。

ログシンクに送信されるエラー文字列の正確な出力を制御する方法はありますか?

+0

'log.Error(ex、.....)'にブレークポイントを設定すると、この時点で 'ex.MessageまたはInnerException'で取得できますか? – MethodMan

答えて

2

おそらくenrichmentが参考になる場合があります。特にそのリンクで議論されていないが、カスタムenrichersを構築することができます。

public class ExceptionEnricher : ILogEventEnricher 
{ 
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) 
    { 
     if (logEvent.Exception != null) 
     { 
      // do something here 

      propertyFactory.CreateProperty("ExtraExceptionDetail", extraDetail); 
     } 
    } 
} 

そして...

var loggerConfig = new LoggerConfiguration() 
    .MinimumLevel.Debug() 
    .WriteTo.Seq(url) 
    .Enrich.With<ExceptionEnricher>() 
    .Enrich.FromLogContext(); 

は、私はあなたが参照するパッケージの経験を持っていないが、このアプローチはあなたをすることができますSeqに書き込まれる前にイベントのプロパティを変更、傍受、変更、追加、削除することができます。

関連する問題