【问题标题】:dynamic log4net appender name?动态 log4net 附加程序名称?
【发布时间】:2010-04-13 18:19:08
【问题描述】:

假设我在同一个 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>

【问题讨论】:

    标签: c# logging log4net


    【解决方案1】:

    这并不能直接回答您的问题,但另一种方法是简单地拥有多个 log4net 配置文件并在右侧调用 XmlConfigurator.Configure()。例如,您可能有Logging.Development.ConfigLogging.Beta.Config 等等。

    在代码中的某处,您确定“环境”并使用您想要的文件进行配置。

    我什至有多个配置文件并将它们的不同部分提取到一个表示“真实”配置的单个 XML 中,然后在其上调用 Configure() 方法。例如,Logging.Appenders.Config 具有所有附加程序,并将所有附加程序与上述特定于环境的配置文件之一结合起来;特定于环境的仅引用他们需要的内容,其余的对于该环境实际上是非活动的/未引用的。

    【讨论】:

      【解决方案2】:

      即使在写了唯一的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

      对于我、我自己和我......我会以另一种方式一起处理它。我将从默认值派生我自己的 SMTP 附加程序,并在 ActivateOptions() 方法中根据环境配置值。这将允许您使用一个具有一致规则的 SMTP 附加程序,并为您要发送的每个电子邮件地址提供三个公共属性。不难,试试吧!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 2021-09-06
        相关资源
        最近更新 更多