property example configurar java multithreading logging log4j log4j2

java - example - Diferencia entre Asynclogger y AsyncAppender en Log4j2



log4j2 example (2)

Tengo entendido que AsyncAppender hace el trabajo anexado en un hilo de sesión. Ellos usan ArrayBlockingQueue para este propósito.

Y

AsyncLogger usa la biblioteca de interruptores LMAX para mover el evento de registro de un subproceso de aplicación al otro subproceso y es más rápido en comparación con AsyncAppender.

Mi pregunta es ¿por qué tenemos AsyncAppender en log4j2 si AsyncLogger logra el trabajo que hace con mayor eficacia?

¿Qué pasa si usamos AsyncAppender junto con AsyncLogger? ¿Hay más diferencias entre AsyncLogger y AsyncAppender?


Es cierto que logran casi el mismo propósito, por lo que puedo entender tu pregunta: "¿por qué tener ambas opciones"?

Para los antecedentes, AsyncAppender ha estado en Log4j2 desde el principio, donde se agregaron los Async Loggers en marzo del año pasado (2014). Así nació la situación actual.

El equipo de log4j no está considerando seriamente eliminar el AsyncAppender en este momento. Una cosa que se debe tener en cuenta es que los registradores asíncronos tienen una dependencia externa (el tarro del disruptor de LMAX) donde el AsyncAppender funciona solo con los tarros log4j2-api y log4j2-core.

Para responder a su última pregunta, es posible combinar AsyncAppender con Async Loggers, pero no obtendrá nada. Esto no ha sido probado. No lo he comprobado, pero es posible que haya un problema con la pérdida de información de ubicación al transferir el evento de registro desde el subproceso de Async Logger al subproceso de AsyncAppender. No recomendaría hacer esto.

ACTUALIZACIÓN (2014/6/23): Hice algunas pruebas y hubo algunos problemas con la combinación de AsyncAppender con AsyncLoggers. Estos se fijan en RC2. Todavía no recomiendo hacer esto, ya que solo agrega otro paso intermedio que utiliza CPU / memoria sin aportar nada.

ACTUALIZACIÓN (2016/7/20): Otra diferencia: desde la versión 2.6, Log4j 2 puede estar libre de basura con los registradores asíncronos, pero no con AsyncAppender.

En respuesta a su segunda pregunta en los comentarios a continuación: AsyncAppender tiene su propia cola y subproceso, donde los AsyncLoggers utilizan el LMAX Disruptor ringbuffer para una cola y utiliza un subproceso Executor.


No quite nada de la respuesta aceptada, pero eche un vistazo a https://logging.apache.org/log4j/2.x/manual/async.html . La página incluye las mediciones de rendimiento tomadas por el equipo log4j2, donde los registradores asíncronos superan a los usuarios asíncronos por un cierto margen.