Eine Veränderung der ersten Form ist die beste
log.info("error={}", errmsg);
Wie andere gesagt haben, das zweite Beispiel ein Fehler sein muss, da es kein Format-Token einfügen errmsg
in "error = "
, wenn errmsg
ist eine Throwable
und info
Level-Protokollierung aktiviert ist, dann wird der Logger eine Stracktrace drucken.
Seit vielen Jahren bevorzugte ich die String-Verkettung, die dritte Form. Ich fand es leichter, Monate oder Jahre später zu lesen, wenn ich zurückgehe, um den Code zu lesen.
Wie jedoch Tomasz Nurkiewicz beantwortet, ist die erste Form LOG.info("error={}", errmsg);
die beste. Der Grund ist jedoch nicht, dass String.format()
schneller ist als String-Verkettung. Es ist nicht. Siehe Is it better practice to use String.format over string Concatenation in Java?.
Der Grund für die erste Form ist, dass die Protokollierung deaktiviert ist, dann wird der Logging-Framework aufrufen muss nicht errmsg.toString()
wenn der info
Ebene besser abschneidet und es muss nicht String.format()
überhaupt auszuführen. Der einzige Fall, in dem errmsg.toString()
keine Leistungskosten hat, ist, wenn errmsg
ein String
ist.
Ich würde auch keine Whitespace um die =
vorschlagen, da viele Log-Aggregatoren wie Splunk automatisch error=errmsg
in ein Feld und ein Wertpaar indexieren.Auch wenn dies wirklich ein Fehler ist, dann würde ich es auf die error()
Ebene schreiben, nicht info()
. Und höchstwahrscheinlich gibt es irgendwo vor diesem Code eine Throwable
Ausnahme, die in den Throwable
Parameter gehen sollte.
Und logger
, während es wahrscheinlich als final
deklariert ist, ist ein veränderbares Objekt, so sollte es in Kleinbuchstaben sein. Siehe Should a "static final Logger" be declared in UPPER-CASE?.
wodurch die Antwort wirklich
sein sollte
log.info("error={}", errMsg, exception);
Ich denke, die zweite für Ausnahmen verwendet wird, nicht wahr? z.B. LOG.info ("Fehler beim Lesen der Datei", e); – m0therway
@Pregnantmom: du hast absolut recht! Die "Errmsg" hat mich glauben gemacht, dass dies keine Ausnahme ist. Korrigierte meine Antwort. –
Persönlich bevorzuge ich die dritte Verwendung String-Verkettung. Was die Leistung betrifft, kann die String-Verkettung schneller sein: http://stackoverflow.com/questions/925423/is-it-better-practice-to-use-string-format-over-string-concatenation-in-java – Kirby