如何使用serilog自定义异常输出

时间:2016-09-16 21:16:14

标签: c# logging serilog getseq

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

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

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

ex.ToAsyncString()

我希望能够在将堆栈跟踪写入Seq之前使用此库来拦截堆栈跟踪,而是记录清理/修改的堆栈跟踪。

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

1 个答案:

答案 0 :(得分:5)

或许enrichment可能会对您有所帮助。虽然未在该链接中进行具体讨论,但您可以构建自定义更容器:

git commit -m "commit"

...然后

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

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

我对您引用的包没有任何经验,但是这种方法允许您在将事件写入Seq之前拦截并修改/添加/删除事件的属性。