【问题标题】:How to customize exception output using serilog如何使用 serilog 自定义异常输出
【发布时间】:2016-09-16 21:16:13
【问题描述】:

我使用 Serilog 作为我的日志框架(使用 Seq 作为我的日志接收器)。在记录异常时,我使用的是:

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

我的应用程序大量使用了 async/await 方法。当发生未处理的异常时,堆栈跟踪很难阅读。有一个 nuget 包可以清理异步堆栈跟踪 (https://github.com/aelij/AsyncFriendlyStackTrace)。这将创建一个扩展方法,让您可以访问修改/干净的堆栈跟踪:

ex.ToAsyncString()

我希望能够使用此库在堆栈跟踪写入 Seq 之前拦截它,并记录干净/修改后的堆栈跟踪。

Serilog/Seq 有没有办法控制发送到日志接收器的错误字符串的确切输出?

【问题讨论】:

  • 当你在log.Error(ex, .....) 下一个断点时,你能在ex.Message or InnerException 处得到...吗?

标签: c# logging serilog getseq seq-logging


【解决方案1】:

也许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 之前拦截和修改/添加/删除事件的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2023-04-08
    • 2018-08-08
    相关资源
    最近更新 更多