【发布时间】:2017-03-29 08:57:10
【问题描述】:
我只想在 100 ERRORS 被写为 html 表之后发送一封电子邮件(这是SmtpExtendedAppender 的目的,遍历所有保存的消息)但我不是确定如何访问它们。
这是我的 app.config:
<appender name="SmtpAppender" type="log4net.Appender.SmtpExtendedAppender">
<authentication value="Basic" />
<password value="xxxxxx"/>
<username value="xxxxxxxx"/>
<from value="myemail@gmail.com" />
<to value="toemail@gmail.com" />
<smtpHost value="smtp.gmail.com" />
<isBodyHtml value="true" />
<bufferSize value="100" />
<EnableSsl value="true"/>
<subject value="test logging message" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE} [%logger]%newlineUsername: %property{username}%newline%level - %message%newline%exception" />
</layout>
</appender>
这是我的控制台应用程序:
static void Main(string[] args)
{
Console.WriteLine("hello world");
log.Error("This is my first error message");
log.Error("This is my second error message");
Console.ReadLine();
}
我不完全理解 log4net 缓冲区大小的工作原理,即使我给它的值是 100,它每次运行我的控制台应用程序时都会向我发送 2 封单独的电子邮件。
如果我将运行此应用程序 50 次以达到 100 个错误,是否可以累积它们然后在一封电子邮件中发送它们?
【问题讨论】:
-
我不这么认为——当应用程序退出时,appender 会关闭,刷新它的缓冲区,然后发送电子邮件。您需要扩展 appender 以获得某种支持存储来保存日志事件,直到达到阈值。
-
@stuartd 你的意思是将消息存储在
cache或session? -
除非您准备好丢失消息,否则您会希望使用持久存储。
-
@stuartd 在这个答案中,他说缓冲区消息保存在 RAM 中,stackoverflow.com/questions/30630952/… 这是真的吗?
-
当进程(即你的控制台应用程序正在运行)时,消息被缓冲在进程内存中。当进程结束(应用程序终止)时,缓冲区中的任何内容都会被刷新。
标签: log4net smtpappender