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
实例