Java >> Java tutorial >  >> Tag >> Log4j

Forskellen mellem AsyncLogger og AsyncAppender i Log4j2

Sandt nok opnår de stort set det samme formål, så jeg kan forstå dit spørgsmål:"hvorfor har begge muligheder"?

Som baggrund har AsyncAppenderen været i Log4j2 fra begyndelsen, hvor Async Loggere blev tilføjet i marts sidste år (2014). Sådan opstod den nuværende situation.

log4j-teamet overvejer ikke seriøst at fjerne AsyncAppender i øjeblikket. En ting at huske på er, at Async Loggere har en ekstern afhængighed (LMAX disruptor jar), hvor AsyncAppender kun arbejder med log4j2-api og log4j2-core jars.

For at besvare dit sidste spørgsmål er det muligt at kombinere AsyncAppender med Async Loggere, men du vil ikke vinde noget. Dette er ikke blevet testet. Jeg har ikke tjekket, men det er muligt, at der er et problem med placeringsoplysninger, der går tabt, når loghændelsen overføres fra Async Logger-tråden til AsyncAppender-tråden. Jeg vil ikke anbefale at gøre dette.

OPDATERING (2014/6/23):Jeg testede noget, og der var et par problemer med at kombinere AsyncAppender med AsyncLoggers. Disse er rettet i RC2. Jeg anbefaler stadig ikke at gøre dette, da det blot tilføjer endnu et mellemtrin, der bruger CPU/hukommelse uden at bidrage med noget.

OPDATERING (2016/7/20):En anden forskel:siden version 2.6 kan Log4j 2 være skraldfri med Async Loggere, men ikke med AsyncAppender.

Som svar på dit andet spørgsmål i kommentarerne nedenfor:AsyncAppender har sin egen kø og tråd, hvor AsyncLoggers bruger LMAX Disruptor-ringbufferen til en kø og bruger en Executor-tråd.


Tager ikke noget fra det accepterede svar, men tag et kig på https://logging.apache.org/log4j/2.x/manual/async.html. Siden inkluderer præstationsmålinger taget af log4j2-holdet, hvor asynkrone loggere overgå asynkrone appenders med en vis margin.


Java tag