#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>