首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式更改SmtpAppender的主题

以编程方式更改SmtpAppender的主题
EN

Stack Overflow用户
提问于 2017-09-12 13:08:38
回答 1查看 764关注 0票数 0

我有一个这样的SmtpAppender

代码语言:javascript
复制
<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的名字:

代码语言:javascript
复制
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;
}

然后我可以像这样换个话题:

代码语言:javascript
复制
IAppender appender = FindAppenderByName("SmtpAppender");
SmtpAppender smtpAppender = (SmtpAppender)appender;
smtpAppender.Subject = "An error occured trying to convert the values";
log.Error("Error message");

但是这似乎有点太复杂了,因为每次我发送错误邮件时,我首先必须按名称查找这个附录,而且我不想使用全局IAppender对象,这对我来说似乎是一种糟糕的做法。

是否有一种方法可以使用用户指定的错误消息作为主题,或者是否有可以使用的扩展方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 09:20:01

我的建议如下:

  • 创建一个扩展SmtpAppender的新类
  • 覆盖SendBuffer
  • 基于您的LoggingEvent,动态更改base.Subject
代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46177315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档