如何使用 serilog 自定义异常输出
How to customize exception output using serilog
我使用 Serilog 作为我的日志记录框架(使用 Seq 作为我的日志接收器)。当记录异常时,我使用类似的东西:
log.Error(ex, "Operation Failed");
我的应用程序大量使用 async/await 方法。当发生未处理的异常时,堆栈跟踪非常难以阅读。有一个 nuget 包可以清理异步堆栈跟踪 (https://github.com/aelij/AsyncFriendlyStackTrace)。这将创建一个扩展方法,让您可以访问 modified/clean 堆栈跟踪:
ex.ToAsyncString()
我希望能够在将堆栈跟踪写入 Seq 之前使用此库拦截堆栈跟踪,而不是记录 clean/modified 堆栈跟踪。
有没有办法 Serilog/Seq 控制发送到日志接收器的错误字符串的准确输出?
也许 enrichment 对您有帮助。虽然在 link 中没有具体讨论,但您可以构建自定义增强器:
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 之前拦截事件的 modify/add/remove 属性。
我使用 Serilog 作为我的日志记录框架(使用 Seq 作为我的日志接收器)。当记录异常时,我使用类似的东西:
log.Error(ex, "Operation Failed");
我的应用程序大量使用 async/await 方法。当发生未处理的异常时,堆栈跟踪非常难以阅读。有一个 nuget 包可以清理异步堆栈跟踪 (https://github.com/aelij/AsyncFriendlyStackTrace)。这将创建一个扩展方法,让您可以访问 modified/clean 堆栈跟踪:
ex.ToAsyncString()
我希望能够在将堆栈跟踪写入 Seq 之前使用此库拦截堆栈跟踪,而不是记录 clean/modified 堆栈跟踪。
有没有办法 Serilog/Seq 控制发送到日志接收器的错误字符串的准确输出?
也许 enrichment 对您有帮助。虽然在 link 中没有具体讨论,但您可以构建自定义增强器:
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 之前拦截事件的 modify/add/remove 属性。