使用自定义主题配置或扩展log4net SmtpAppender

使用自定义主题配置或扩展log4net SmtpAppender,log4net,log4net-configuration,Log4net,Log4net Configuration,如何为生成的电子邮件主题指定布局和转换模式 BufferSize需要小于或等于1,这样就不会发生缓冲。CodeProject文章看起来很有希望 通过从所需的基本appender(在我的例子中是smtppickupdireappender)继承并添加ILayout属性,可以更改Append方法中的主题 公共类SmtpSubjectLayoutPickupDirAppender:log4net.Appender.SmtpPickupDirAppender { 公共SmtpSubjectLayout

如何为生成的电子邮件主题指定布局和转换模式

BufferSize需要小于或等于1,这样就不会发生缓冲。

CodeProject文章看起来很有希望


通过从所需的基本appender(在我的例子中是smtppickupdireappender)继承并添加ILayout属性,可以更改Append方法中的主题

公共类SmtpSubjectLayoutPickupDirAppender:log4net.Appender.SmtpPickupDirAppender
{
公共SmtpSubjectLayoutPickupDirAppender()
:base()
{
}
公共ILayout主题布局
{
得到;
设置
}
受保护的覆盖无效附加(log4net.Core.LoggingEvent LoggingEvent)
{
if(this.BufferSize另一个带有自定义主题的SmtpAppender示例。

您可以从


因为前面的回答建议使用NuGet版本的SmtpAppenderWithSubjectLayout需要log4net版本>1.2.1,所以我使用了NuGet源代码,但修改后使用了log4net 1.2.1

public类SmtpAppender与subjectlayout:SmtpAppender
{
公共模式布局主题布局{get;set;}
受保护的重写void SendBuffer(LoggingEvent[]事件)
{
准备主题(事件);
base.SendBuffer(事件);
}
受保护的虚拟void PrepareSubject(IEnumerable事件)
{
var subjects=新列表();
foreach(在事件中记录事件@事件)
{
if(Evaluator.IsTriggeringEvent(@event))
{
var subjectWriter=newstringwriter(System.Globalization.CultureInfo.InvariantCulture);
SubjectLayout.Format(subjectWriter,@event);
subjects.Add(subjectWriter.ToString());
}
}
Subject=string.Join(“,”,subjects.ToArray());
}
}

对于自定义属性:ThreadContext.properties[“myVal”]=“whatever”
public ILayout SubjectLayout
必须是
public PatternLayout SubjectLayout
才能工作。