Unterschied zwischen Asynclogger und AsyncAppender in Log4j2
Habe ich Verständnis, dass AsyncAppender tun das anfügen von job-in eine seprate thread. Sie verwenden ArrayBlockingQueue für diesen Zweck.
UND
AsyncLogger verwendet LMAX disruptor-Bibliothek zu bewegen, Protokollierung Ereignis von einer Anwendung thread in den anderen thread und es ist auch schneller als im Verhältnis zu AsyncAppender.
Meine Frage ist, warum haben wir AsyncAppender in log4j2, wenn der job es nicht ist, erreicht, indem AsyncLogger mehr effizient.
Was, wenn wir AsyncAppender zusammen mit AsyncLogger ? Gibt es weitere Unterschiede zwischen AsyncLogger und AsyncAppender?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahr, Sie erreichen so ziemlich den gleichen Zweck, von daher kann ich Ihre Frage zu verstehen: "warum haben Sie beide Optionen"?
Hintergrund, die AsyncAppender wurde in Log4j2 von Anfang an, wo Asynchrone Logger Hinzugefügt wurden letztes Jahr im März (2014). Das ist, wie die aktuelle situation zustande kam.
Log4j-team nicht ernsthaft erwägen, das entfernen der AsyncAppender im moment. Eine Sache im Auge zu behalten ist, dass Asynchrone Logger eine externe Abhängigkeit (den LMAX disruptor jar), wo die AsyncAppender funktioniert nur mit dem log4j2-api und log4j2-core-Gläser.
Zur Beantwortung Ihrer letzten Frage, ist es möglich, zu kombinieren AsyncAppender mit Asynchronen Loggern, aber Sie werden nicht alles gewinnen. Dieser wurde nicht getestet. Ich habe nicht überprüft, aber es ist möglich, dass es ein problem mit dem location-Informationen verloren, wenn die übergabe des log-Ereignisses von der Asynchronen Logger-thread im AsyncAppender thread. Ich würde nicht empfehlen, dies zu tun.
UPDATE (2014/6/23): ich habe einige Tests und es gab ein paar Probleme mit der Kombination AsyncAppender mit AsyncLoggers. Diese sind fest in RC2. Ich weiß immer noch nicht empfehlen dies zu tun, wie es fügt nur ein weiterer Zwischenschritt verwendet CPU/memory ohne alles beizutragen.
UPDATE (2016/7/20): ein Weiterer Unterschied: seit der version 2.6, Log4j 2 kann die Müll-kostenlos mit Asynchronen Loggern, aber nicht mit AsyncAppender.
In der Antwort auf Ihre zweite Frage unten in den Kommentaren: AsyncAppender hat seine eigene queue und thread, wo AsyncLoggers verwenden Sie den LMAX Disruptor ringbuffer für eine Warteschlange und verwendet eine Executor-thread.
Nicht nehmen nichts Weg von der akzeptierten Antwort, aber nehmen Sie einen Blick auf https://logging.apache.org/log4j/2.x/manual/async.html.
Die Seite beinhaltet Auftritte Messungen durch die log4j2-team, in dem asynchronen Loggern übertreffen async appenders um einiges Marge.