首页 > 解决方案 > 如何使用 serilog Enrichers 修改 LogEvent 属性值?

问题描述

我需要修改使用 serilog 记录的对象的特定属性值(压缩异常的堆栈跟踪字符串)。

正在记录的 JSON 消息具有以下格式:

{
  "@l": "Error",
  "errorDetails": {
    "StatusCode": 500,
    "Message": "some exception message.",
    "Exception": {
      "Message": "some exception message.",
      "Data": [],
      "InnerException": null,
      "StackTrace": "STACKTRACE VALUE THAT NEEDS TO BE COMPRESSED",
      "HelpLink": null,
      "Source": "",
      "HResult": -2146233088,
      "$type": "Exception"
    },
    "TimeStamp": 1623771938973,
    "Path": null,
    "$type": "Container"
  }
}

下面是 Enricher 的代码:

public class CustomEnricher : ILogEventEnricher
    {
        public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
        {
            var errorContainer = logEvent.Properties["errorDetails"];
        }
    } 

在上面的代码中,我在 errorContainer (LogEventPropertyValue 类型)中获取日志消息。

但无法访问我要修改的特定属性(异常中的堆栈跟踪)。

基本上我正在记录异常并希望在记录之前压缩异常的 stackTrace 属性。

我尝试直接在 Exception 中修改 stacktrace 的值,但它是只读的。

可以使用 Enricher 修改属性吗?

有没有其他解决方案?

标签: .netloggingserilog

解决方案


推荐阅读