2015-09-24 46 views
0

我使用log4net将邮件发送给我的应用程序用户。 我必须拥有动态配置才能做到这一点。 所以我尝试使用GlobalContext.Properties这个,但它不工作!Log4net- smtpAppender的动态配置属性

这是我原来的appender代码:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <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"] = "[email protected]"; 
     ILog emailLog = log4net.LogManager.GetLogger("EmailLogger"); 
     log4net.Config.XmlConfigurator.Configure(emailLog.Logger.Repository); 

     emailLog.Error("test aaa"); 

回答

1

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

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

documentation

此字符串中嵌入被解决,当 字符串格式化扩展模式。

+0

有没有一种方法来创建和追加的SMTP的Appender到log4net的不和配置在web.config文件。 –

+0

@CengizAraz是的,你可以添加一个编程 – stuartd

+0

是否有任何引用,您可以添加在这里?因为所有我通过搜索看到人们在添加SmtpAppender到配置文件,或者重写SendBuffer()或append()方法。我想创建一些动态的东西,并能够在我的C#文件中定义SmtpAppender的所有属性。我会非常感激。 –