我正在实施自己的ILogEventEnricher
:
public interface ILogEventEnricher
{
void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory);
}
我想知道存储由LogEventProperty
创建的ILogEventPropertyFactory
对象是不是惯用,以便我可以在进一步丰富的过程中重复使用这个属性?因为我不喜欢每次记录调用时重新序列化我的上下文属性的想法。
答案 0 :(得分:1)
LogEventProperty
创建的 ILogEventPropertyFactory
本质上是一对属性名称和值。某些类具有抽象LogEventPropertyValue
类,具有ScalarValue
,StructureValue
,SequenceValue
等具体后代。每个类都保留原始属性值(在某些类中预处理)方式)并在Render()
方法中使用漂亮的格式转储它。
如你所见LogEventProperty
基本上是一个没有魔法背后的数据包。如果您为相同的属性名称和值多次调用ILogEventPropertyFactory.CreateProperty()
,您将得到相同的LogEventProperty
个对象,这些对象将在日志中生成相同的数据。
所以是的,为了性能考虑,可以缓存LogEventProperty
个实例。