PatternString 类型何时在 Log4NET 中得到解析?
When does PatternString type get resolved in Log4NET?
假设我有以下 CustomSmtpAppender:
<appender name="SmtpAppender" type="EmgNetExt.EMGSmtpAppender, EmgNetExt">
...
<subject type="log4net.Util.PatternString" value="ERROR: %property{app_sub_name}" />
...
</appender>
所以每次发送电子邮件时,%属性{app_sub_name} 都会解析为空字符串。它最初设置为一个空字符串,但随着应用程序运行,该值会更改以标记应用程序在某个时间点的位置,以防发生错误。所以我导致了错误的发生,在调试点我看到了:
log4net.GlobalContext.Properties("app_sub_name")
returns 正确的值,但我的电子邮件仍然显示为空白 "app_sub_name"。
所以我想也许 log4net 在最初读取 log4net.config 时解析了 PatternString JUST ONCE 但我无法确认这一点或者我可能错过了步骤和做错事。 log4net 何时解析主题元素?仅在最初加载 log4net.config 时或每次调用 appender 时?有没有办法在每次调用 appender 时强制它解析?
Appenders 在配置 log4net 时只被解析和评估一次(例如,通过 XmlConfigurator.Configure
调用),所以正如你猜到的主题将被评估一次。 SmtpAppender
的 Subject
属性 是字符串而不是具有动态功能的类型,支持这一点。此外 To
和 From
属性也不是动态的,因此您无法在执行期间更改它们。即使您使用 PatternString
,它也会在解析配置时通过类型转换器转换为字符串。
无法使用当前 SmtpAppender
更改此行为,因为属性是非动态的。您可以创建一个使用动态值填充电子邮件字段的附加程序。
假设我有以下 CustomSmtpAppender:
<appender name="SmtpAppender" type="EmgNetExt.EMGSmtpAppender, EmgNetExt">
...
<subject type="log4net.Util.PatternString" value="ERROR: %property{app_sub_name}" />
...
</appender>
所以每次发送电子邮件时,%属性{app_sub_name} 都会解析为空字符串。它最初设置为一个空字符串,但随着应用程序运行,该值会更改以标记应用程序在某个时间点的位置,以防发生错误。所以我导致了错误的发生,在调试点我看到了:
log4net.GlobalContext.Properties("app_sub_name")
returns 正确的值,但我的电子邮件仍然显示为空白 "app_sub_name"。
所以我想也许 log4net 在最初读取 log4net.config 时解析了 PatternString JUST ONCE 但我无法确认这一点或者我可能错过了步骤和做错事。 log4net 何时解析主题元素?仅在最初加载 log4net.config 时或每次调用 appender 时?有没有办法在每次调用 appender 时强制它解析?
Appenders 在配置 log4net 时只被解析和评估一次(例如,通过 XmlConfigurator.Configure
调用),所以正如你猜到的主题将被评估一次。 SmtpAppender
的 Subject
属性 是字符串而不是具有动态功能的类型,支持这一点。此外 To
和 From
属性也不是动态的,因此您无法在执行期间更改它们。即使您使用 PatternString
,它也会在解析配置时通过类型转换器转换为字符串。
无法使用当前 SmtpAppender
更改此行为,因为属性是非动态的。您可以创建一个使用动态值填充电子邮件字段的附加程序。