我有SmtpAppender
这样:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="MyEmail@example.org" />
<from value="SenderEmail@example.org" />
<subject type="log4net.Util.PatternString" value="This is a subject" />
<smtpHost value="smtp.host.value" />
<authentication value="Basic" />
<port value="587" />
<username value="Username" />
<password value="Password" />
<bufferSize value="1" />
<EnableSsl value="true"/>
<lossy value="false" />
<threshold value="ERROR" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%3thread] %-5level [%class].[%method] - %message%newline" />
</layout>
</appender>
我想将我的代码中的日志邮件主题更改为我指定的字符串,以便它比标准主题更适合我的需求。
现在我就这样实现了。首先,我按名称找到SmtpAppender
:
public static IAppender FindAppenderByName(string name) {
ILoggerRepository rootRep = LogManager.GetRepository();
foreach (IAppender iApp in rootRep.GetAppenders()) {
if (string.Compare(name, iApp.Name, true) == 0) {
return iApp;
}
}
return null;
}
然后我可以改变这样的主题:
IAppender appender = FindAppenderByName("SmtpAppender");
SmtpAppender smtpAppender = (SmtpAppender)appender;
smtpAppender.Subject = "An error occured trying to convert the values";
log.Error("Error message");
但这似乎有点过于复杂,因为每次发送错误邮件时我首先必须按名称查找appender而我不想使用全局IAppender
对象以及看起来似乎对我来说是不好的做法。
有没有办法将用户指定的错误消息用作主题,还是有可以使用的扩展方法?
答案 0 :(得分:0)
我的建议如下:
根据您的LogginEvent,动态更改base.Subject
public class CustomSmtpAppender : SmtpAppender
{
protected override void SendBuffer(LoggingEvent[] events)
{
PrepareSubject(events);
base.SendBuffer(events);
}
protected virtual void PrepareSubject(IEnumerable<LoggingEvent> events)
{
//here you can eval events and set base.Subject
}
}