我可以使用log4net在VB解决方案(Visual Studio 2010)中使用smtpappender和Gmail帐户将日志记录信息发送到电子邮件地址。收件人是在log4net配置文件中配置的,但是我希望能够动态更改收件人电子邮件地址。
是否可以不必编写自定义smtpappender?
答案是是还是否,请举个例子,最好是在VB中。
最佳答案
这是不可能的,当前的SmtpAppender不允许这样做。但是很幸运,SmtpAppender中的SendBuffer
可以被覆盖,因此您可以轻松地向其中添加一些行为。我认为您最好的选择是使用LoggingEvent属性设置收件人:
public class MySmtpAppender : SmtpAppender
{
protected override void SendBuffer(log4net.Core.LoggingEvent[] events)
{
var Recipients = events
.Where(e => e.Properties.Contains("recipient"))
.Select(e => e.Properties["recipient"])
.Distinct();
var RecipientsAsASingleLine = string.Join(";", Recipients.ToArray()); // or whatever the separator is
var PreviousTo = To;
To = RecipientsAsASingleLine;
base.SendBuffer(events);
To = PreviousTo;
}
}
您可能需要更改选择收件人的方式,即您的 call 。
编辑 The tool recommended by stuartd效果很好(嗯,这是一个非常简单的类,但是仍然):
Public Class MySmtpAppender
Inherits SmtpAppender
Protected Overrides Sub SendBuffer(events As log4net.Core.LoggingEvent())
Dim Recipients = events.Where(Function(e) e.Properties.Contains("recipient")).[Select](Function(e) e.Properties("recipient")).Distinct()
Dim RecipientsAsASingleLine = String.Join(";", Recipients.ToArray())
' or whatever the separator is
Dim PreviousTo = [To]
[To] = RecipientsAsASingleLine
MyBase.SendBuffer(events)
[To] = PreviousTo
End Sub
End Class
关于vb.net - log4net smtpappender自定义电子邮件收件人,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26054072/