如何使用Serilog 2记录Exception.data键/值?

时间:2017-04-12 14:08:00

标签: serilog

我们的旧式日志记录框架(.NET 4.5)将遍历Exception.data并记录每个Exception.data键值。记录与当前异常相关的上下文支持很有用。有没有办法配置Serilog来记录Exception.data键值?

Serilog 2

1 个答案:

答案 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包,它具有许多常见异常类型的智能。