smtpAppender

时间:2015-09-24 11:15:42

标签: c# log4net log4net-configuration log4net-appender

我使用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");

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

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

1 个答案:

答案 0 :(得分:1)

你必须告诉log4net该属性使用“模式字符串”:

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

来自documentation

  

此字符串具有嵌入的模式,这些模式在解析和扩展时   字符串已格式化。