我们的旧式日志记录框架(.NET 4.5)将遍历Exception.data并记录每个Exception.data键值。记录与当前异常相关的上下文支持很有用。有没有办法配置Serilog来记录Exception.data键值?
Serilog 2
答案 0 :(得分:4)
这是Serilog的等效代码:
public class ExceptionDataEnricher : ILogEventEnricher
{
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
if (logEvent.Exception == null ||
logEvent.Exception.Data == null ||
logEvent.Exception.Data.Count == 0) return;
var dataDictionary = logEvent.Exception.Data
.Cast<DictionaryEntry>()
.Where(e => e.Key is string)
.ToDictionary(e => (string)e.Key, e => e.Value);
var property = propertyFactory.CreateProperty("ExceptionData", dataDictionary, destructureObjects: true);
logEvent.AddPropertyIfAbsent(property);
}
}
您可以在this Gist中找到包含配置的完整程序。
更复杂和灵活的选择是使用Serilog.Exceptions包,它具有许多常见异常类型的智能。