如何访问AdoNetAppender的log4net自定义属性?

时间:2014-05-08 23:25:47

标签: properties log4net

我正在添加属性

LogicalThreadContext.Properties["callContextId"] = "123456";

我的配置如下:

<parameter>
  <parameterName value="@CallContextId" />
  <dbType value="String" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%property{callContextId}" />
  </layout>
</parameter>

这一切都有效......但我可以添加一个复杂的对象并访问其属性吗?例如

myObject.Id = "123456";
LogicalThreadContext.Properties["callContext"] = myObject;

我想做这样的事情......是否支持/可能?

<conversionPattern value="%property{callContext}.Id" />

由于

1 个答案:

答案 0 :(得分:1)

不,log4net不支持。

如果您查看PropertyPatternConverter中的代码,就会在PatternConverter class中看到它调用WriteObject,然后只会在属性中存储的对象上调用ToString

它也不容易实现,因为您必须使用代码来提取属性名称,然后使用反射来提取值。因为你可以通过在LogicalThreadContext.Properties中存储对象属性的值来完成同样的事情,所以它是不值得的。