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

use*_*632 3 serilog

我们的旧日志框架 (.NET 4.5) 将迭代 Exception.data 并记录每个 Exception.data 键值。记录与当前异常相关的上下文道具非常好。有没有办法配置 Serilog 来记录 Exception.data 键值?

序列号 2

Nic*_*rdt 5

这是 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此 Gist 中找到带有配置的完整程序。

一个更复杂和灵活的选择是使用Serilog.Exceptions包,它具有针对许多常见异常类型的智能

  • 对我有用...如果您可以在另一个问题中发布您的配置,我也许能够发现出了什么问题。 (2认同)