以编程方式更改 SmtpAppender 的主题
Change subject of SmtpAppender programmatically
我有一个 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
对象以及这对我来说似乎是不好的做法。
有没有办法将用户指定的错误消息用作主题,或者有没有我可以使用的扩展方法?
我的建议如下:
- 创建一个新的 class 扩展
SmtpAppender
- 覆盖
SendBuffer
- 根据您的
LoggingEvent
,动态更改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
}
}
我有一个 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
对象以及这对我来说似乎是不好的做法。
有没有办法将用户指定的错误消息用作主题,或者有没有我可以使用的扩展方法?
我的建议如下:
- 创建一个新的 class 扩展
SmtpAppender
- 覆盖
SendBuffer
- 根据您的
LoggingEvent
,动态更改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
}
}