Un'alterazione della prima forma è la migliore
log.info("error={}", errmsg);
Come altri hanno già detto, il secondo esempio deve essere un errore in quanto non v'è alcun segno formato da inserire errmsg
in "error = "
, a meno che errmsg
sia un Throwable
e info
la registrazione del livello sia abilitata, quindi il registratore stamperà un stracktrace.
Per molti anni ho preferito la concatenazione di stringhe, la terza forma. Ho trovato più facile leggere mesi o anni dopo quando torno a leggere il codice.
Tuttavia, come risposta Tomasz Nurkiewicz, il primo modulo LOG.info("error={}", errmsg);
è il migliore. Il motivo, tuttavia, non è che String.format()
è più veloce della concatenazione di stringhe. Non lo è. Vedi Is it better practice to use String.format over string Concatenation in Java?.
La ragione per la prima forma si comporta meglio è che se la registrazione info
livello è disattivata, allora il quadro di registrazione non deve chiamare errmsg.toString()
e non deve eseguire String.format()
a tutti. L'unico caso in cui lo errmsg.toString()
non ha costi di performance è se errmsg
è un String
.
Inoltre suggerisco di non inserire spazi bianchi attorno allo =
poiché molti aggregatori di registri come Splunk indicizzeranno automaticamente error=errmsg
in una coppia di campi e valori.Inoltre, se questo è veramente un errore, allora lo scriverei al livello error()
, non info()
. E molto probabilmente c'è un'eccezione Throwable
da qualche parte prima di questo codice che dovrebbe andare nel parametro Throwable
.
E, logger
, mentre è probabilmente dichiarato come final
, è un oggetto mutabile, quindi, dovrebbe essere in minuscolo. Vedi Should a "static final Logger" be declared in UPPER-CASE?.
che significa che la risposta dovrebbe davvero essere
log.info("error={}", errMsg, exception);
Credo che il secondo è usato per le eccezioni, giusto? per esempio. LOG.info ("Errore durante la lettura del file", e); – m0therway
@Pregnantmom: hai assolutamente ragione! L'errmsg mi ha fatto credere che questa non sia un'eccezione. Corretta la mia risposta –
Personalmente preferisco il terzo utilizzo della concatenazione di stringhe. Per quanto riguarda le prestazioni, la concatenazione delle stringhe può essere più veloce: http://stackoverflow.com/questions/925423/is-it-better-practice-to-use-string-format-over-string-concatenation-in-java – Kirby