使用 NLog 发送带有失败日志的电子邮件

Sending email with failure log using NLog

我希望我的服务将错误日志文件发送到我的电子邮件中我试过了,但没有成功:

<target name="logfile" xsi:type="File" fileName="${basedir}/logs/log.log"
        archiveFileName="${basedir}/logs/log.{#####}.txt"
        archiveAboveSize="10485760"
        archiveNumbering="Sequence"
        concurrentWrites="true"
        keepFileOpen="false"
        layout="${longdate} - ${level:uppercase=true}: ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"
        />


<target name="logmail"
       xsi:type="Mail"
       smtpServer="172.XX.XX.XX"
       smtpPort="25"
       smtpAuthentication="Basic"
       smtpUserName="abc@xyz"
       smtpPassword="XXXX"
       enableSsl="false"
       subject="Jobpool Errors"
       from="abc@xyz"
       to="abc@xyz"
       layout ="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}${newline}"
       useSystemNetMailSettings="false"                     
       timeout="30" />

这是记录器详细信息:

 <logger name="*" minlevel="Debug" writeTo="logfile" />
        <logger name="*" minlevel="Error" writeTo="logmail" />
        <logger name="*" minlevel="Info" writeTo="logmail" />

我注意到的第一个显而易见的事情是,您已将身份验证设置为 None,但您传递的是用户名和密码。如果您的 SMTP 服务器需要身份验证,那么您需要将其更改为 Basic:

smtpAuthentication="Basic"

接下来要检查的是您是否已将此目标与任何记录器相关联,例如:

<logger name="*" minLevel="Info" writeTo="logmail" />

假设此配置正确,下一步是启用一些 NLog 调试功能以尝试确定故障发生的位置。首先,您可以通过以下配置指令告诉 NLog 在发生错误时抛出异常:

<nlog throwExceptions="true" />

如果这仍然没有产生任何有用的信息,您还可以配置 NLog 以通过以下方式将其内部日志记录写入文件:

<nlog internalLogFile="file.txt" />

有关详细信息,请参阅 NLog 配置维基页面的 this section