Gibt es einen Vorteil der Verwendung {}
anstelle der Verkettung von Zeichenfolgen?
Ein Beispiel aus slf4j
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
anstatt
logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT);
Ich denke, es geht um Geschwindigkeitsoptimierung, da die Auswertung von Parametern (und die Verkettung von Zeichenfolgen) zur Laufzeit abhängig von einer Konfigurationsdatei vermieden werden könnte. Es sind jedoch nur zwei Parameter möglich. Manchmal gibt es keine andere Wahl als die Verkettung von Zeichenfolgen. Ich brauche Ansichten zu diesem Thema.
quelle
Kurzfassung: Ja, es ist schneller, mit weniger Code!
Die Verkettung von Zeichenfolgen erledigt viel Arbeit, ohne zu wissen, ob sie benötigt wird oder nicht (der herkömmliche Test "ist debugging-fähig", der aus log4j bekannt ist) und sollte nach Möglichkeit vermieden werden, da mit {} der Aufruf von toString () und die Zeichenfolgenkonstruktion verzögert werden können bis nachdem entschieden wurde, ob das Ereignis erfasst werden muss oder nicht. Durch das Logger-Format einer einzelnen Zeichenfolge wird der Code meiner Meinung nach sauberer.
Sie können beliebig viele Argumente angeben. Beachten Sie, dass Sie, wenn Sie eine alte Version von sljf4j verwenden und mehr als zwei Argumente haben
{}
,new Object[]{a,b,c,d}
stattdessen die Syntax verwenden müssen, um ein Array zu übergeben. Siehe z. B. http://slf4j.org/apidocs/org/slf4j/Logger.html#debug(java.lang.String, java.lang.Object []) .In Bezug auf die Geschwindigkeit: Ceki hat vor einiger Zeit einen Benchmark auf einer der Listen veröffentlicht.
quelle
debug(String format, Object... arguments)
. Siehe slf4j.org/faq.html#logging_performanceDa String in Java unveränderlich ist , müssen der linke und der rechte String für jedes Verkettungspaar in den neuen String kopiert werden. Also besser für den Platzhalter gehen.
quelle
Eine andere Alternative ist
String.format()
. Wir verwenden es in jcabi-log (statischer Dienstprogramm-Wrapper um slf4j).Es ist viel wartbarer und erweiterbarer. Außerdem ist es einfach zu übersetzen.
quelle
value
Änderung ändert, müssen Sie zurückgehen und auch die Protokollierungsanweisung ändern. Etwas, bei dem IDEs Ihnen nicht helfen werden. Logger sollten beim Debuggen helfen und nicht in die Quere kommen. :-)String.format("%d", "Test")
Erzeugt die IntelliJ-WarnungArgument type 'String' does not match the type of the format specifier '%d'.
. Ich bin mir jedoch nicht sicher, ob diese intelligente Antwort bei der Arbeit mit der oben genannten Lösung noch möglich ist.Ich denke, aus Sicht des Autors besteht der Hauptgrund darin, den Overhead für die Verkettung von Zeichenfolgen zu reduzieren. Ich habe gerade die Dokumentation des Loggers gelesen, Sie könnten folgende Wörter finden:
quelle