smtpAppender 的 Log4net- 动态配置属性

Log4net- dynamic configuration properties for smtpAppender

我使用 log4net 向我的应用程序用户发送邮件。 我必须为此进行动态配置。 所以我尝试为此使用 GlobalContext.Properties,但它不起作用!

这是我的原始 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");

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

在追加器上:

  <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");

你必须告诉 log4net 属性 使用 "pattern string":

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

来自documentation

This string has embedded patterns that are resolved and expanded when the string is formatted.