Gibt es eine korrekte Möglichkeit, Argumente in slf4j zu übergeben?
Im mit slf4j, die für die Verfolgung der Informationen. Mein code ist
private static final Logger log = LoggerFactory.getLogger(ObjectTest.class);
log.trace("Time taken to store " + count
+ " objects of size " + size + " is " + (time) + " msecs");
log.trace("Time taken to store {} objects of size {} is {} msecs",
new Object[] { count, size, time });
log.trace("Time taken to store {} objects of size {} is {} msecs",
count, size, time);
Welches wäre der bevorzugte Mechanismus zur Protokoll-traces.
InformationsquelleAutor der Frage diya | 2011-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
3 ist die beste.
3 und 2 erzeugen die gleichen (oder fast gleichen) bytecode, aber 3 ist einfacher zu geben und ist kürzer, so 3 ist besser als 2.
Wenn die Ablaufverfolgung ist nicht aktiviert, 1 ausführen müssen, string-Verkettung ("Zeit genommen, um zu speichern" + count + ....) das ist etwas teuer, während 2 ist die string-Verkettung nur dann, wenn trace aktiviert ist, das ist, warum 3 ist besser als 1.
InformationsquelleAutor der Antwort sbridges
3 ist am besten, außer, dass es nicht unterstützt wird SLF4J 1.6.x. Für drei oder mehr Argumente müssen Sie die zweite form. Die Dritte form funktioniert nur mit einem oder zwei Argumenten (aber nicht drei oder mehr).
Als von SLF4J 1.7, die Dritte form wird nun unterstützt für 3 oder mehr Argumente als gut. Der java-compiler schweigend wandelt Aufrufe mit 3 oder mehr Argumenten, um die zweite form, die übergabe eines Objekts [], um die Druck-Methode. Dies ist eine Implementierung detail von varargs in Java und ermöglicht SLF4J 1.7 zu 100% kompatibel mit SLF4J 1.6.
InformationsquelleAutor der Antwort Ceki
Die 3. Variante ist die beste.
In der Tat 1. Fall ist ein string-Verkettung über die Klasse StringBuilder.
Den 2. und 3. Fällen sind die gleichen.
Sie müssen Feld-Ganzzahl-Werte an Ganzzahl - (oder einem anderen Objekt) und dann, um ein array zu packen.
Den einfachen test auf meinem Rechner sagen, dass die 3. Variante ist besser, in etwa 8 mal in den Fall, wenn keine Protokollierung ausgeführt (56ns vs 459ns).
InformationsquelleAutor der Antwort Фима Гирин