Ich verwende Log4J in meiner Anwendung für die Protokollierung. Zuvor verwendete ich einen Debug-Aufruf wie:
Option 1:
logger.debug("some debug text");
Einige Links deuten jedoch darauf hin, dass es besser ist, isDebugEnabled()
zuerst zu überprüfen , z.
Option 2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
Meine Frage lautet also " Verbessert Option 2 die Leistung in irgendeiner Weise? ".
Denn in jedem Fall hat das Log4J-Framework die gleiche Prüfung für debugEnabled. Für Option 2 kann es vorteilhaft sein, wenn wir mehrere Debug-Anweisungen in einer einzelnen Methode oder Klasse verwenden, wobei das Framework die isDebugEnabled()
Methode nicht mehrmals (bei jedem Aufruf) aufrufen muss. In diesem Fall wird die isDebugEnabled()
Methode nur einmal aufgerufen. Wenn Log4J für die Debug-Ebene konfiguriert ist, wird die isDebugEnabled()
Methode tatsächlich zweimal aufgerufen :
- Im Fall der Zuweisung eines Werts zur debugEnabled-Variablen und
- Wird tatsächlich von der Methode logger.debug () aufgerufen.
Ich denke nicht, dass wenn wir mehrere logger.debug()
Anweisungen in Methode oder Klasse schreiben und debug()
Methode gemäß Option 1 aufrufen , dies für das Log4J-Framework im Vergleich zu Option 2 isDebugEnabled()
ein Overhead ist. Da es sich um eine sehr kleine Methode handelt (in Bezug auf Code), könnte dies der Fall sein sei ein guter Kandidat für Inlining.