Объединить LimitingWrapper и BufferingWrapper для целевой почты NLog

#logging #nlog

#ведение журнала #nlog

Вопрос:

Я надеялся добиться как группировки, так и регулирования сообщений журнала, используя комбинацию целей LimitingWrapper и BufferingWrapper . Независимо от того, какая цель была внутренней или внешней, я не мог заставить ее работать.

Например, я хотел бы сгруппировать сообщения журнала на 5 секунд в одно и то же сообщение электронной почты (используя BufferingWrapper ), но ограничить его отправкой максимум или 10 писем в час с использованием LimitingWrapper .

Возможно ли достичь этого, используя одну или несколько целей NLog?

Ответ №1:

Думаю, вы могли бы создать 2 целевых конвейера. Первый конвейер, который запускается мгновенно при первой ошибке, и второй конвейер, который запускается каждые 6 минут.

 <targets>
   <target type="Mail" name="email" />
   <target type="LimitingWrapper" name="emailInstant" messageLimit="1">
        <target-ref name="email" />
   </target>
   <target type="BufferingWrapper" name="emailLazy" flushTimeout="360">
        <target-ref name="email" />
   </target>
</target>
<rules>
   <logger name="*" minLevel="Warn" writeTo="emailInstant, emailLazy" />
</rules>
 

Смотрите также: https://github.com/NLog/NLog/wiki/LimitingWrapper-target

Смотрите также: https://github.com/nlog/NLog/wiki/BufferingWrapper-target

Я думаю, можно было бы расширить NLog LimitingWrapper с помощью новой опции messageBatchLimit (PullRequests приветствуются). Это вместо ограничения отдельного количества сообщений, тогда можно было бы сделать так, чтобы ограничить количество пакетов сообщений:

 <targets>
   <target type="BufferingWrapper" name="emailbuffer" flushTimeout="5">
        <target type="LimitingWrapper" name="emailBuffer" messageBatchLimit="10">
                <target type="Mail" name="email" />
        </target>
   </target>
<targets>
<rules>
   <logger name="*" minLevel="Warn" writeTo="emailBuffer" />
</rules>