PatternString类型何时在Log4NET中得到解析?

时间:2015-05-28 14:55:13

标签: c# vb.net log4net

假设我有以下CustomSmtpAppender:

 <appender name="SmtpAppender" type="EmgNetExt.EMGSmtpAppender, EmgNetExt">  
...
 <subject type="log4net.Util.PatternString" value="ERROR: %property{app_sub_name}" />
...
</appender>

因此每次发送电子邮件时,%propery {app_sub_name}都会解析为空字符串。它最初设置为空字符串,但随后应用程序运行时,值会更改为标记应用程序在某个时间点的位置,以防发生错误。所以我导致了错误发生,在调试点我看到了:

log4net.GlobalContext.Properties("app_sub_name")返回正确的值,但我的电子邮件仍然显示空白的“app_sub_name”。

所以我想也许log4net在最初读取log4net.config时解析了PatternString JUST ONCE 但是我无法确认这一点,或者我错过了一步并做错了什么。 log4net何时解析主题元素?只是在最初,当它加载log4net.config或每次调用appender时?有没有办法在每次调用appender时强制它解决?

1 个答案:

答案 0 :(得分:1)

在配置log4net时(例如通过XmlConfigurator.Configure调用),仅对解析器进行解析和评估,因此您已经猜到主题将被评估一次。 Subject的{​​{1}}属性是字符串而不是具有动态功能的类型,因此支持此功能。此外,SmtpAppenderTo属性也不是动态的,因此您无法在执行期间更改它们。即使您使用From,它也会在解析配置时通过类型转换器转换为字符串。

由于属性是非动态的,因此无法使用当前PatternString更改此行为。您可以创建一个使用动态值填充电子邮件字段的追加器。