Il messaggio non si riferisce al costo della concatenazione di stringhe in sé. Le altre risposte hanno assolutamente ragione quando dicono che verrà usato un StringBuilder.
Il motivo principale per utilizzare un modello di messaggio è perché l'elaborazione viene eseguita solo quando viene visualizzato il livello di registrazione!
cerchiamo di utilizzare questi due esempi:
srcLogger.getLogger().log(Level.INFO,"UploadBean.doUpload completado [" + file.getName() + "]\n");
srcLogger.getLogger().log(Level.INFO, "UploadBean.doUpload completado [{0}]\n", file.getName());
Con livello INFO debug on: Entrambi hanno per ottenere il nome del file da File, entrambi hanno per aggiornare la stringa, generarne uno nuovo, visualizzarla.
Con livello di debug INFO off: La seconda risposta passa attraverso il nome dell'oggetto File (che è una query semplice), il metodo log() controlla il livello INFO e restituisce immediatamente. Nessuna elaborazione String
eseguita affatto!
Ora immagina che invece di un semplice file.getName()
stessimo registrando un oggetto più complesso, uno che aveva bisogno di un sacco di concatenazione di stringhe nel metodo toString()
. Registrando tali oggetti direttamente, nessuna di tali elaborazioni viene eseguita. toString()
non viene mai chiamato a meno che non venga visualizzato il livello di debug.
Quindi il modello di messaggio non è più efficiente nel caso in cui venga visualizzata la registrazione, ma è enormemente più efficiente (in particolare nei casi di registrazione non banale) quando la registrazione non viene visualizzata. Uno degli obiettivi della registrazione dovrebbe essere che se la registrazione è disattivata ha il minimo impatto possibile sulle prestazioni del sistema.
fonte
2013-12-30 13:03:07
Per disattivare l'avviso (in NetBeans 7.2.1): Preferenze -> Editor -> Suggerimenti -> Registrazione -> Concatenazione di stringhe nel registratore. La descrizione dice " Non è efficiente dal punto di vista delle prestazioni concatenare le stringhe nei messaggi del logger. È preferibile utilizzare un messaggio modello con segnaposti che vengono sostituiti da valori concreti solo quando il messaggio verrà realmente registrato." –
In realtà ti sei perso uno dei maggiori vantaggi, aggiungerò una risposta anche se è tardi :) –
Ma l'avvertimento è un'inefficienza dovuta alla concatenazione che viene sempre eseguita anziché eseguirla solo in base al livello di registrazione corrente nel caso in cui di usare il ['log (livello livello, string msg, oggetto [] params)'] (https://docs.oracle.it/javase/8/docs/api/java/util/logging/Logger.html # log-java.util.logging.Level-java.lang.String-java.lang.Object: metodo A-). – Adam