2016-09-16 15 views
3

我使用Serilog作爲我的日誌框架(Seq作爲我的日誌接收器)。在記錄異常時,我正在使用類似於:如何使用serilog自定義異常輸出

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

我的應用程序大量使用異步/等待方法。當發生未處理的異常時,堆棧跟蹤非常難以閱讀。有一個nuget包清理異步堆棧跟蹤(https://github.com/aelij/AsyncFriendlyStackTrace)。這將創建一個擴展方法給您訪問修改/乾淨的堆棧跟蹤:

ex.ToAsyncString() 

我希望能夠使用這個庫之前,它被寫入序列攔截堆棧跟蹤,而是日誌清理/修改堆棧跟蹤。

有沒有一種方法用Serilog/Seq來控制發送到日誌接收器的錯誤字符串的確切輸出?

+0

當你在'log.Error(ex,.....)放置一個斷點時''你可以在'ex.Message或InnerException'處獲得這個點..? – MethodMan

回答

2

也許enrichment可能會對您有所幫助。雖然在該環節沒有具體討論,你可以創建自定義的濃縮商:

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。