В чем разница между AsyncTaskTarget и AsyncWrapper Target в NLog 4.5? - PullRequest
0 голосов
/ 26 августа 2018

В чем разница между AsyncTaskTarget и AsyncWrapper ?

Что лучше?

Я видел, что AsyncWrapper имеет больше параметров конфигурации (например, queueLimit , overflowAction и более), что важно для меня (я не хочу, чтобы журналы удалялись, даже если буферизовано более 10000 журналов, так как я работаю над сайтом для какой-то крупной компании).

Так это единственная разница?

Почему тогда у нас даже есть что-то вроде AsyncTaskTarget?

Более того, что произойдет, если я объединю AsyncTaskTarget и AsyncWrapper с чем-то вроде этого:

CustomTargetExtendingAsyncTaskTarget customTarget = CustomTargetExtendingAsyncTaskTarget();
AsyncTargetWrapper asyncTargetWrapper = new AsyncTargetWrapper(customTarget, 100000, AsyncTargetWrapperOverflowAction.Grow);

это плохая идея?

1 Ответ

0 голосов
/ 27 августа 2018

В итоге:

  • AsyncTarget - это цель, которая оборачивается вокруг других целей, чтобы дать им асинхронное поведение. Полезно знать, что async=true, который можно применить в файле nlog.config, также является AsyncWrapper.

    Например, запись асинхронного файла:

    <target name="target2" xsi:type="AsyncWrapper">
       <target name ="target1" xsi:type="File"
                fileName="c:/temp/test.log" layout="${message}"
                keepFileOpen="true" />
    </target>
    
  • AsyncTaskTarget - это (абстрактный) базовый класс для создания пользовательских целей (например, в C #) с асинхронным поведением. Вы не можете использовать AsyncTaskTarget в своем nlog.config

    Рольф хорошо описывает это: (от https://github.com/NLog/NLog/issues/2872)

    AsyncTaskTarget - это базовый класс, аналогичный TargetWithLayout, для создания собственной настраиваемой цели. Это облегчает создание одной цепочки задач с обработкой тайм-аута. По умолчанию он гарантирует, что регистратор не остановлен, поскольку он просто выполняет запись во внутреннюю очередь (и планирует задачу записи, если ни одна из них не активна).

...