[英]dynamic log4net appender name?
假设我在同一个log4net文件中有3个smtp附加程序,其名称为:
<appender name = "emailDevelopment".. />
<appender name = "emailBeta".. />
<appender name = "emailProduction".. />
假设我有3个不同的服务器(开发,测试版,生产)。 根据服务器,我要触发日志。 如果是开发服务器,它将从“ emailDevelopment”启动日志。 我在每个名为“ ApplicationEnvironment”的服务器中都有一个系统变量,其值基于服务器名称为Development,Beta,Production。 现在无论如何,我都可以在log4net中设置root,以便它根据服务器名称触发电子邮件。
<root>
<priority value="ALL" />
<appender-ref ref="email<environment name from whose appender should be used>" />
</root>
这不能直接回答您的问题,但是另一种方法是简单地拥有多个log4net配置文件,然后在右侧的文件中调用XmlConfigurator.Configure()
。 例如,您可能具有Logging.Development.Config
, Logging.Beta.Config
等。
在代码中的某个位置,您可以确定“环境”并使用所需的文件进行配置。
我什至可以拥有多个配置文件,并将它们的不同部分提取到一个表示“ true”配置的XML中,然后在其上调用Configure()
方法。 例如, Logging.Appenders.Config
具有所有附加程序,并将所有附加程序都使用,并将其与上面的特定于环境的配置文件之一结合在一起; 特定于环境的仅参考其需要,其余的对于该环境实际上是无效的/未参考的。
即使为log4net配置编写了唯一的XSD文件,我仍然不知道实现此目的的简便方法。
您可能可以执行以下操作:
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
对于我自己,我自己和我……我将以另一种方式一起处理它。 我将从默认值派生自己的SMTP附加程序,并在ActivateOptions()方法中根据环境配置值。 这将允许您使用一个具有一致规则的SMTP附加程序,而又为要发送的每个电子邮件地址提供三个公共属性。 不难,尝试一下!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.