我正在为log4net创建一个自定义包装器。我正在尝试填充我的LoggingEventData对象,并且我想将一些自定义属性传递给Appender的append
方法。
但是,这些属性是中间属性,所以我不希望它们处于appender配置中。
LoggingEventData.Properties是一个只读字典。 有没有办法获得一个值,让我将自定义属性(通过LoggingEventData)传递给appender而不必更新appender或配置文件?
答案 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属性 记录事件发生时的值