只发送一封电子邮件与所有的错误使用NLog与控制台应用程序使用c#
本文关键字:错误 NLog 应用程序 控制台 电子邮件 | 更新日期: 2023-09-27 17:54:14
我只想发送一封电子邮件,其中包含我从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}"
/>
我有一个Info规则和一个Error规则:
<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);
您可以为您的电子邮件目标使用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>
Edit 2:是否在退出程序之前调用LogManager.Flush() ?
编辑3: ${newline}布局渲染器应该在您的电子邮件中产生一个换行符(在上面的layout
属性的末尾)。