В чем разница между AsyncWrapper и BufferingWrapper в NLog v2?

Я просматривал некоторые из рекомендаций для NLog, когда заметил следующую целевую конфигурацию:

<targets async="true">
  <default-wrapper xsi:type="BufferingWrapper" bufferSize="100"/>
  <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />
  <!-- other stuff -->
</targets>

Насколько я понимаю, это оборачивает целевой файл с помощью AsyncWrapper, а также с помощью BufferingWrapper...

Какая разница между двумя? Нужны ли мне оба, так как сайт NLog описывает оба как «буферизация»....


person zam6ak    schedule 28.03.2012    source источник


Ответы (2)


Как только в буфере будет достаточно сообщений (указанных параметром bufferSize), BufferingWrapper заблокирует и запишет сообщения в свою цель. Вызывающий должен будет дождаться окончания записи.

AsynWrapper использует отдельный поток для обработки операций записи. Вызовы немедленно возвращаются, и вызывающий абонент может продолжить свою работу, а журнал записывается позже.

person Juha Palomäki    schedule 25.10.2013
comment
BufferingWrapper кажется (теперь) асинхронным, если используется slidingTimeout. github.com/nlog/nlog/wiki/BufferingWrapper-target - person Alex Angas; 27.07.2016
comment
Только если буфер не заполнен до истечения времени сброса - person Inbar Barkai; 04.09.2019
comment
@Juha ‹‹ Как только в буфере будет достаточно сообщений (указанных параметром bufferSize), BufferingWrapper заблокирует и запишет сообщения в свою цель. Вызывающий должен будет дождаться окончания записи. ›› Я предполагаю, что это означает, что BufferingWrapper безопасно использовать, например, в Функциях Azure, без риска выхода функции за пределы области действия до буферизованных сообщений, которые будут записаны в цель, заключается в том, что правильный? - person Matthew; 31.08.2020

BufferingWrapper работает как дроссель, поэтому ставит сообщения в очередь перед их записью в фактическая цель. Например, писать электронное письмо со всеми оповещениями каждую 1 минуту.

AsyncWrapper использует фоновый поток для записи в реальную цель, поэтому приложение регистрация кода не будет заблокирована. AsyncWrapper улучшает параллелизм при наличии нескольких потоков приложений, регистрирующих одну и ту же цель. AsyncWrapper также улучшает целевую пропускную способность за счет записи небольшими партиями вместо одного LogEvent за раз.

person Rolf Kristensen    schedule 26.11.2020