我有一个这样的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");但是这似乎有点太复杂了,因为每次我发送错误邮件时,我首先必须按名称查找这个附录,而且我不想使用全局IAppender对象,这对我来说似乎是一种糟糕的做法。
是否有一种方法可以使用用户指定的错误消息作为主题,或者是否有可以使用的扩展方法?
发布于 2017-10-11 09:20:01
我的建议如下:
SmtpAppender的新类SendBufferLoggingEvent,动态更改base.Subjectpublic 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
}
}https://stackoverflow.com/questions/46177315
复制相似问题