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

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

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

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

ex.ToAsyncString()

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

是否有一种方法可以使用Serilog / Seq来控制发送到日志接收器的错误字符串的确切输出?

解决方法:

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

上一篇:【Shell脚本学习24】Shell输入输出重定向:Shell Here Document,/dev/null文件


下一篇:使用pyqt5的日期控件做一个小日历方便查看