0

我在我的配置中配置了 SMTP 记录器,如下所示:

<appender name="SmtpEndUserAppender" type="log4net.Appender.SmtpAppender">
                     <to value="someReciever@sjm.com"/>
                     <from value="serviceAccount@sjm.com"/>
                     <subject value="Error occured in the XML Conversion Utility"/>
                     <smtpHost value="smtp server name"/>
                     <bufferSize value="1024"/>
                     <lossy value="false"/>
                     <layout type="log4net.Layout.PatternLayout">
                           <conversionPattern value="%date{MM-dd-yyyy HH:mm:ss.ff} [%thread] %-5level %logger - %message%newline"/>
                     </layout>
              </appender>

问题是,如果消息很小,它可以很好地发送,但如果 appender 发现一条消息太长,它只会通过代码块而不会在收件箱中收到任何电子邮件。

var log = LogManager.GetLogger(Constants.ENDUSEREMAILLOGGER);
log.Info(string.Format(Constants.EMAILERRORMESSAGETEMPLATE, unprocessedFile, ex.Message));

ex.message 有时会变得很长(比如 2000 行或其他内容),因为我在循环超过 5000 行并收集所有错误时使用字符串生成器。

我们需要增加缓冲区大小吗?为什么会有这种行为?

4

1 回答 1

0

您的短邮件是否有可能通过 log.Error 发送,而您的大邮件使用 log.Info?

bufferSize 是在通过电子邮件发送之前缓冲的非错误事件的数量。换句话说,如果您没有使用 log.Error,那么在您调用 log.info 1024 次之后您将不会收到任何电子邮件,然后您会收到一封包含所有 1024 条消息的电子邮件。

但是 log.Error 将刷新缓冲区,该缓冲区将立即发送电子邮件。

另一种可能性是包含所有 1024 条消息的电子邮件因太大而被拒绝。

于 2012-11-20T15:05:22.510 回答