Serilog:是否可以缓存 ILogEventPropertyFactory 产生的 LogEventProperty?

Serilog: Is it okay to cache LogEventProperty produced by ILogEventPropertyFactory?

我正在实施我自己的 ILogEventEnricher:

public interface ILogEventEnricher
{
    void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory);
}

而且我想知道存储由 ILogEventPropertyFactory 创建的 LogEventProperty 对象是否符合习惯,以便我可以在进一步充实期间重用此 属性?因为我不喜欢每次记录调用都重新序列化我的上下文属性的想法。

LogEventPropertyILogEventPropertyFactory创建,本质上是一对属性名称和值。值有一个抽象类型 LogEventPropertyValue class,它有具体的后代,如 ScalarValueStructureValueSequenceValue 等。每个 classes只保留原始 属性 值(以某种方式预处理)并在 Render() 方法中以漂亮的格式转储它。

如您所见,LogEventProperty 基本上是一个没有任何魔法的数据包。如果您多次为相同的 属性 名称和值调用 ILogEventPropertyFactory.CreateProperty(),您将获得相等的 LogEventProperty 个对象,这些对象将在日志中生成相同的数据。

所以是的,出于性能考虑,可以缓存 LogEventProperty 个实例。