C# Serilog:缓存ILogEventPropertyFactory生成的LogEventProperty可以吗?

C# Serilog:缓存ILogEventPropertyFactory生成的LogEventProperty可以吗?,c#,logging,serilog,C#,Logging,Serilog,我正在实现自己的ILogEventEnricher: public interface ILogEventEnricher { void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory); } 我想知道存储由ILogEventPropertyFactory创建的LogEventProperty对象是否是惯用做法,这样我就可以在以后的充实中重用这个属性?因为我不喜欢每次日志调用都重新序列化上下文属性的想

我正在实现自己的
ILogEventEnricher

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

我想知道存储由
ILogEventPropertyFactory
创建的
LogEventProperty
对象是否是惯用做法,这样我就可以在以后的充实中重用这个属性?因为我不喜欢每次日志调用都重新序列化上下文属性的想法。
ILogEventPropertyFactory
创建的LogEventProperty本质上是一对属性名称和值。Value有一类抽象的
LogEventPropertyValue
类,该类有具体的后代,如
ScalarValue
StructureValue
SequenceValue
,等等。这些类中的每一个都只保留原始属性值(以某种方式进行预处理),并在
Render()
方法中以漂亮的格式转储它

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

因此,出于性能考虑,可以缓存
LogEventProperty
实例