簡體   English   中英

如何使用 serilog 自定義異常輸出

[英]How to customize exception output using serilog

我使用 Serilog 作為我的日志框架(使用 Seq 作為我的日志接收器)。 在記錄異常時,我使用的是類似的東西:

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

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

ex.ToAsyncString()

我希望能夠在將堆棧跟蹤寫入 Seq 之前使用該庫攔截堆棧跟蹤,並記錄干凈/修改后的堆棧跟蹤。

Serilog/Seq 有沒有辦法控制發送到日志接收器的錯誤字符串的確切輸出?

也許充實在這里可能會有所幫助。 雖然在該鏈接中沒有具體討論,但您可以構建自定義豐富器:

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 之前攔截和修改/添加/刪除事件的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM