Подтвердить что ты не робот

Разница между Asynclogger и AsyncAppender в Log4j2

У меня есть понимание того, что AsyncAppender выполняет задание добавления в отдельном потоке. Они используют ArrayBlockingQueue для этой цели.

и

AsyncLogger использует библиотеку LMAX disruptor для перемещения события регистрации из одного потока приложений в другой поток, и он быстрее компрометирует AsyncAppender.

Мой вопрос: почему у нас есть AsyncAppender в log4j2, если работа, которую он выполняет, достигается более эффективно с помощью AsyncLogger.

Что делать, если мы используем AsyncAppender вместе с AsyncLogger? Существуют ли какие-либо различия между AsyncLogger и AsyncAppender?

4b9b3361

Ответ 1

Правда, они достигают почти той же цели, поэтому я могу понять ваш вопрос: "почему есть оба варианта"?

Для фона AsyncAppender был в Log4j2 с самого начала, где Async Loggers были добавлены в марте прошлого года (2014). То, как сложилась нынешняя ситуация.

Команда log4j серьезно не рассматривает возможность удаления AsyncAppender на данный момент. Следует иметь в виду, что Async Loggers имеет внешнюю зависимость (LMAX disruptor jar), где AsyncAppender работает только с банками log4j2-api и log4j2.

Чтобы ответить на ваш последний вопрос, можно комбинировать AsyncAppender с Async Loggers, но вы ничего не получите. Это не было проверено. Я не проверял, но возможно, что проблема с информацией о местоположении теряется при передаче события журнала из потока Async Logger в поток AsyncAppender. Я бы не рекомендовал это делать.

UPDATE (2014/6/23): Я провел некоторое тестирование, и было несколько проблем с объединением AsyncAppender с AsyncLoggers. Они фиксируются в RC2. Я по-прежнему не рекомендую это делать, поскольку он просто добавляет еще один промежуточный шаг, который использует процессор/память, не внося ничего.

UPDATE (2016/7/20): Еще одно отличие: начиная с версии 2.6, Log4j 2 может быть без мусора с Async Loggers, но не с AsyncAppender.


В ответ на ваш второй вопрос в комментариях ниже: AsyncAppender имеет свою собственную очередь и поток, где AsyncLoggers используют кольцевой буфера LMAX Disruptor для очереди и использует поток Executor.

Ответ 2

Не отнимая ничего от принятого ответа, но посмотрите https://logging.apache.org/log4j/2.x/manual/async.html. Страница включает в себя измерения производительности, выполненные командой log4j2, где асинхронные журналы превосходят асинхронные приложения довольно неплохо.