繁体   English   中英

动态的log4net附加程序名称?

[英]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.ConfigLogging.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM