以编程方式将自定义属性添加到LoggingEventData

时间:2015-02-27 22:39:47

标签: c# .net log4net

我正在为log4net创建一个自定义包装器。我正在尝试填充我的LoggingEventData对象,并且我想将一些自定义属性传递给Appender的append方法。

但是,这些属性是中间属性,所以我不希望它们处于appender配置中。

LoggingEventData.Properties是一个只读字典。 有没有办法获得一个值,让我将自定义属性(通过LoggingEventData)传递给appender而不必更新appender或配置文件?

1 个答案:

答案 0 :(得分:0)

我不清楚你想做什么,我怀疑无论它是什么,LoggingEventData路径可能不是最好的,除非你可以在你的包装器中使用LoggingEvent constructor that takes a LoggingEventData instance

可能有用的是,您可以轻松地将数据存储在log4net上下文中,并在记录时检索它。

您可以在日志代码中设置它:

 // Other contexts are available
 // http://logging.apache.org/log4net/release/manual/contexts.html
 log4net.GlobalContext.Properties["value1"] = "Value 1";

并以appender模式检索它,例如:

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%value1 (%property{value1})" />
  </layout>
</appender>

正如this useful blog post on the subject中所述:

  

上下文属性值不必是字符串。你可以设置   上下文属性的值对任何对象引用;的价值   object的ToString方法将用于获取context属性   记录事件发生时的值