使用C#,只使用NLog和控制台应用程序发送一封包含所有错误的电子邮件

时间:2014-03-27 12:40:36

标签: c# nlog

我只想发送一封电子邮件,其中包含我从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);

1 个答案:

答案 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属性的末尾)。