Logging 为多个电子邮件目标正确配置NLogs BufferingWrapper?

Logging 为多个电子邮件目标正确配置NLogs BufferingWrapper?,logging,nlog,Logging,Nlog,我想通过电子邮件向不同的邮件目标发送警告和错误。我已经将它们设置为使用BufferingWrapper <targets> <target xsi:type="BufferingWrapper" name="angryMailBuffer" bufferSize="100"> <target name="angryMail" xsi:type="Mail" smtpSer

我想通过电子邮件向不同的邮件目标发送警告和错误。我已经将它们设置为使用BufferingWrapper

  <targets>
      <target xsi:type="BufferingWrapper" name="angryMailBuffer" bufferSize="100">
        <target name="angryMail"
                xsi:type="Mail"
                smtpServer="smptserver"
                from="fromemail"
                subject="Error"
                to="toemail" />
      </target>

      <target xsi:type="BufferingWrapper" name="warningMailBuffer" bufferSize="500">
        <target name="warningMail"
                xsi:type="Mail"
                smtpServer="smtpserver"
                from="fromemail"
                subject="Warnings"
                to="toemail"/>
      </target>
    </targets>
    <rules>
      <logger name="*" level="Error" writeTo="angryMailBuffer"/>
      <logger name="*" level="Warn" writeTo="warningMailBuffer"/>
    </rules>
这将导致发送一封包含警告的电子邮件。错误不会被发送

如果我修改规则以写入邮件目标而不是缓冲区。我收到3封电子邮件。2个错误和1个警告


为什么NLog的行为不像我预期的那样?

问题似乎与中的相同。
这意味着除了在程序退出之前手动调用flush之外,没有什么可以做的,这是必需的,因为使用了AppDomain.ProcessExit事件

这很有趣,我需要研究一下。您使用的是哪个版本的NLog?3.1.0.0一位同事建议我在程序末尾添加LogManager.Flush()。这确实导致所有错误/警告都通过电子邮件发送给目标类型、BufferingWrapper和Mail。这样做只是一种良好的习惯,还是可能会发生其他事情?
private static void Main(string[] args)
{
    Log.Error("error");
    Log.Error("error");
    Log.Warn("warning");
    Log.Warn("warning");
}