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

时间:2018-02-06 09:29:23

标签: c# logging serilog

我正在实施自己的ILogEventEnricher

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

我想知道存储由LogEventProperty创建的ILogEventPropertyFactory对象是不是惯用,以便我可以在进一步丰富的过程中重复使用这个属性?因为我不喜欢每次记录调用时重新序列化我的上下文属性的想法。

1 个答案:

答案 0 :(得分:1)

LogEventProperty创建的

ILogEventPropertyFactory本质上是一对属性名称和值。某些类具有抽象LogEventPropertyValue类,具有ScalarValueStructureValueSequenceValue等具体后代。每个类都保留原始属性值(在某些类中预处理)方式)并在Render()方法中使用漂亮的格式转储它。

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

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