假设我在同一个log4net文件中有3个smtp appender,其名称为:
<appender name = "emailDevelopment".. />
<appender name = "emailBeta".. />
<appender name = "emailProduction".. />
假设我有3种不同的服务器(Dev,Beta,Production)。根据服务器,我想激活日志。如果是开发服务器,它将从“emailDevelopment”触发日志。我在每个名为“ApplicationEnvironment”的服务器中都有一个系统变量,其值为Development,Beta,Production,基于服务器名称。无论如何我现在可以在log4net中设置root,以便根据服务器名称触发电子邮件。
<root>
<priority value="ALL" />
<appender-ref ref="email<environment name from whose appender should be used>" />
</root>
答案 0 :(得分:4)
答案 1 :(得分:1)
即使在写完XSD file for log4net configuration之后,我仍然没有意识到实现这一目标的简单方法。
您可以执行以下操作:
log4net.GlobalContext.Properties["host"] = new ClassThatToStringsHost();
class ClassThatToStringsHost
{ public override string ToString() { return "whatever"; } }
现在,您可以使用以下日期格式引用此值:“%property {host}”
要执行过滤,您需要在适配器中使用过滤器配置:
<appender name="file" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.PropertyFilter">
<Key value="host" />
<StringToMatch value="whatever" />
</filter>
<!-- Anything not accepted by the above should be excluded -->
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
甚至可能有一个你可以利用的内置属性,这应该有效。另请参阅此帖子:http://geekswithblogs.net/rgupta/archive/2009/03/03/dynamic-log-filenames-with-log4net.aspx
对我,我自己和我......我会以另一种方式接近它。我将从默认值和ActivateOptions()方法派生自己的SMTP appender,我将根据环境配置值。这将允许您使用一个具有一致规则的SMTP appender,并为您要发送的每个电子邮件地址提供三个公共属性。这不难,试一试!