只发送一封电子邮件与所有的错误使用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);

只发送一封电子邮件与所有的错误使用NLog与控制台应用程序使用c#

您可以为您的电子邮件目标使用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属性的末尾)。