Ich versuche die asynchrone Protokollierung (aus Leistungsgründen) in REST-Webmethoden einzurichten, die derzeit auf einem Liberty-Profilserver ausgeführt werden.log4j2: Speicherort für die Log4jContextSelector-Systemeigenschaft für die asynchrone Protokollierung
Um dies zu tun, ich habe die folgende Eigenschaft ein:
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
Mein Problem ist, dass, egal wo ich dies tun, manchmal funktioniert es und Protokollierung ist sehr schnell, und manchmal es doesn‘ t.
I versucht haben, (a) in den Konstruktor für die Klasse alle Webmethoden REST enthaltenden (b) in dem Filter doFilter Methode, die (c) in dem Filter init Verfahren vor dem REST-Methode aufgerufen wird (d) in der REST-Methode selbst
keiner dieser Orte funktioniert konsistent.
Kann jemand eine Erklärung für dieses Verhalten und wenn möglich eine vorgeschlagene Möglichkeit zur Behebung des Problems bieten.
EDIT: Es scheint, dass log4j vor dem Aufruf von setProperty initialisiert wird. Also, was ich tun muss, ist die Einrichtung der Eigenschaft über Liberty-Profil statt.
@fnt Nein, ich habe keine Beweise, habe keine Vergleiche gemacht, also werde ich meinen Kommentar ändern. Ich habe nur einen Vergleich mit Standard-Logging hier [Binäre Logging-Leistung - Folie 23] (http://www.slideshare.net/cnbailey/websphere-technical-university-top-websphere-problem-determination-features). – Gas
Sie können [binary logging] (http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.wlp.nd.multiplatform.doc/ae/twlp_confHPEL.html?cp) auswerten = SSAW57_8.5.5% 2F3-0-2-9-1 & lang = en) Option in Liberty, da es eine bessere Leistung als die Standardprotokollierung bietet. Vielleicht wird es dir gut genug sein. – Gas
Gut gelesen. https://springframework.guru/asynchronous-logging-with-log4j-2/ –