smtpAppender的动态配置属性

本文关键字:属性 配置 动态 smtpAppender | 更新日期: 2023-09-27 18:14:26

我使用log4net向我的应用程序用户发送邮件。我必须有动态的结构来做它。所以我尝试使用GlobalContext。属性,但它不工作!

这是我的原始appender代码:

   <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="myAddress@myComp.com" />
  <from value="myAddress@myComp.com" />
  <subject value="test logging message" />
  <smtpHost value="out.bezeqint.net" />
  <username value="myUserName" />
  <password value="myPassword />
  <authentication value="Basic" />
  <bufferSize value="512" />
  <lossy value="true" />
  <evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="ERROR" />
  </evaluator>
  <evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="WARN" />
  </evaluator>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %newline%newline - %message%newline" />
  </layout>
</appender>
在c#:

  ILog emailLog = log4net.LogManager.GetLogger("EmailLogger"); 
        log4net.Config.XmlConfigurator.Configure(emailLog.Logger.Repository);
        emailLog.Error("test aaa");

效果很好。但是,我试图将其中一个属性替换为动态的-它不起作用,消息没有发送。

在appender:

  <to value="%property{emailTo}" />
在c#:

  log4net.GlobalContext.Properties["emailTo"] = "myAddress@myComp.com";
        ILog emailLog = log4net.LogManager.GetLogger("EmailLogger"); 
        log4net.Config.XmlConfigurator.Configure(emailLog.Logger.Repository);
        emailLog.Error("test aaa");

smtpAppender的动态配置属性

您必须告诉log4net该属性使用"模式字符串":

<to type="log4net.Util.PatternString"  value="%property{emailTo}" />

来自文档:

该字符串具有嵌入的模式,当字符串被格式化。