我刚刚开始使用Log4Net ...我现在想要发送一封电子邮件,其中包含附加或直接邮寄的完整日志。使用SmtpAppender的问题在于它需要一个未知的bufferSize,因为它应该发送邮件,无论是充满错误还是信息。
更新:我的配置文件
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="ebb@mail.com" />
<from value="ebb@mail.com" />
<subject value="Backup Application - Log" />
<smtpHost value="mailserver" />
<authentication value="1" />
<username value="userName" />
<password value="mypw" />
<port value ="25"/>
<lossy value="true" />
<bufferSize value="500" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ALL"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%timestamp [%thread] %-5level %logger – %message%newline" />
</layout>
</appender>
答案 0 :(得分:16)
BufferSize等于必须缓冲的日志消息数(即如果设置为512,则一旦收集了512条消息,就会发送邮件)。
我认为将其设置为int.MaxValue(2.147.483.647)是一个合理的选择。对于一个系统来说,20亿条消息太多了,甚至是长期运行的。
如果你给我10分钟,我会(从源代码)确认你,如果你清理停止你的应用程序,到目前为止收集的所有日志都将被发送
[更新]:确认 !!析构函数按预期刷新队列
[添加]我会删除有损和评估者。你的问题很明显:评估者优先于缓冲区:):)
评估程序用于在满足特定条件时刷新队列。您的条件等于true
。触发此条件时,将发送电子邮件,因此这就是每次单个日志调用时发送邮件的原因。
稍微不同发送ONLY信息和错误消息,这是通过日志过滤实现的。
删除这两个属性,您的代码将起作用。设置int.MaxValue将允许您存储最大可能的消息数。这不太可能(你最好赢得Superenalotto的178万欧元奖金,就像有些人今晚所做的那样,或被你头脑中的彗星击中)应用程序在一次运行中收集了超过20亿个错误/信息。