我使用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");
答案 0 :(得分:1)
你必须告诉log4net该属性使用“模式字符串”:
<to type="log4net.Util.PatternString" value="%property{emailTo}" />
此字符串具有嵌入的模式,这些模式在解析和扩展时 字符串已格式化。