带有邮件目标的 AutoFlushWrapper

AutoFlushWrapper with Mail target

我正在尝试在发生错误时向自己发送一封包含最新日志条目的电子邮件。但我不想收到任何邮件,除非记录了实际的 ERROR 级别条目,因此我将 bufferSize 设置为一个大数字。我的问题是,当记录错误级别的条目时,邮件目标不会被触发,只有当实际的 bufferSize 被命中时,这意味着我根本没有收到任何邮件,因为 bufferSize这么大。我的 NLog.config 是这样的:

<targets>
  <target name="mailautoflush" xsi:type="AutoFlushWrapper" condition="level >= LogLevel.Error">
    <target name="mailbuffer" xsi:type="BufferingWrapper" bufferSize="1000000">
      <target name="mail" xsi:type="Mail" ... />
    </target>
  </target>
</targets>
<rules>
    <logger name="*" minlevel="Info" writeTo="mailautoflush"></logger>
</rules>

我做错了什么?另外,有没有更好的方法来做到这一点?使用 AutoFlushWrapper/BufferingWrapper 技巧似乎是一种技巧。谢谢!

您的代码看起来有效。

Also, is there a better way to do this? Using the AutoFlushWrapper/BufferingWrapper trick seems like a hack. Thanks!

它更像是一种模块化设计 - 您可以将块相互组合。

它仅在触发 LogEvent 报告它已达到其最终目标后才执行刷新。由于 LogEvent 停在缓冲区中,因此永远不会触发刷新。

已创建 PR:https://github.com/NLog/NLog/pull/2042