我只想发送一封电子邮件,其中包含我从C#控制台应用程序中获得的所有错误。
我有目标:
<target xsi:type="File" name="HeelpAdsImport_log" fileName="${basedir}/logs/HeelpAdsImport-${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}" />
<target name="HeelpAdsImport_patrick_email" xsi:type="Mail"
smtpServer="XXXXX"
smtpPort="25"
smtpAuthentication="Basic"
smtpUserName="YYYYYY"
smtpPassword="*ZZZZZZ"
enableSsl="false"
from="DDDDDDDDDD"
to="EEEEEEEEEEE"
layout="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}"
/>
我有信息规则和错误规则:
<logger name="*" minlevel="Info" writeTo="HeelpAdsImport_log" />
<logger name="*" minlevel="Error" writeTo="HeelpAdsImport_patrick_email" />
我在代码中有几次调用:
logger.Log(LogLevel.Info, " ----- New Ad Success! - auto.id: " + auto.id + " | auto.plate: " + auto.plate);
logger.Log(LogLevel.Error, "| continue error #4 - auto.id: " + auto.id);
答案 0 :(得分:36)
您可以使用BufferingWrapper作为电子邮件目标,将多个日志条目批量处理为一封电子邮件。它支持在指定的时间内(以{毫秒为单位设置flushTimeout
)和/或指定数量的日志条目(将bufferSize
设置为条目数)进行批处理。
修改:将当前目标包含在<target type="BufferingWrapper">
内,如下所示:
<target xsi:type="BufferingWrapper"
name="MailBuffer"
slidingTimeout="false"
bufferSize="100"
flushTimeout="-1">
<target name="HeelpAdsImport_patrick_email" xsi:type="Mail"
smtpServer="XXXXX"
smtpPort="25"
smtpAuthentication="Basic"
smtpUserName="YYYYYY"
smtpPassword="*ZZZZZZ"
enableSsl="false"
from="DDDDDDDDDD"
to="EEEEEEEEEEE"
layout="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}${newline}"
/>
</target>
编辑2 :退出程序前是否致电LogManager.Flush()?
修改3 ${newline}布局渲染器应在您的电子邮件中生成换行符(位于上方layout
属性的末尾)。