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

时间:2014-07-29 15:04:53

标签: logging nlog

我想将警告和错误通过电子邮件发送给不同的邮件目标。我已将它们设置为使用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>

和一个非常简单的控制台应用程序:

private static void Main(string[] args)
{
    Log.Error("error");
    Log.Error("error");
    Log.Warn("warning");
    Log.Warn("warning");
}

这会导致发送包含警告的单个电子邮件。错误不会发送。

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

为什么NLog没有像我期望的那样表现?

1 个答案:

答案 0 :(得分:0)

问题似乎与https://stackoverflow.com/a/15775837中的问题相同。 这意味着除了在程序退出之前手动调用flush之外没有太多工作要做,这是必要的,因为使用了AppDomain.ProcessExit事件。