我正在使用Serilog作为我的日志框架(使用Seq作为我的日志接收器)。记录异常时,我使用的是:
log.Error(ex, "Operation Failed");
我的应用程序大量使用async / await方法。当发生未处理的异常时,堆栈跟踪很难读取。有一个nuget包可以清理异步堆栈跟踪(https://github.com/aelij/AsyncFriendlyStackTrace)。这将创建一个扩展方法,使您可以访问已修改/清除的堆栈跟踪:
ex.ToAsyncString()
我希望能够在将堆栈跟踪写入Seq之前使用此库来拦截堆栈跟踪,而是记录清理/修改的堆栈跟踪。
Serilog / Seq是否有办法控制发送到日志接收器的错误字符串的确切输出?
答案 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之前拦截并修改/添加/删除事件的属性。