Quando si esegue qualcosa come LOG.debug("Exported {}.", product)
in slf4j, si chiamerà infine toString() sugli argomenti, ad es. product
.slf4j senza toString()
Per determinati motivi, non è possibile eseguire l'override di toString() su tutte le classi che desidero utilizzare come argomenti. Alcune classi provengono da contenitori di terze parti, altre avranno il loro toString() chiamato in altri contesti, dove le informazioni che voglio stampare nella mia dichiarazione di registro non sono disponibili.
Tuttavia, ho una classe per scopi di debug che ha un metodo DebugFormatter.format(Object)
che ha una lunga cascata di instanceofs che seleziona la routine per trovare alcune utili informazioni di debug su quell'oggetto.
La mia domanda è: è possibile configurare slf4j in modo che chiami un metodo statico anziché toString()?
Ovviamente, potrei chiamare il mio metodo di formattazione sull'oggetto prima di passarlo come parametro a Logger.debug()
ma poi sarebbe eseguito anche quando il rispettivo logger non è abilitato. Così ho dovuto circondarlo con if (LOG.isDebugEnabled())
il che significa che il punto intero di avere argomenti in debug() è stato perso.
Non hai menzionato il framework di registrazione sottostante. È log4j? logback? – Ceki
È log4j. Sto pensando di passare al logback, comunque. – Wolfgang
Ho accettato la risposta di Andrew come risposta ufficiale perché è più semplice da implementare rispetto a Ceki. È anche indipendente dal framework sottostante. Inoltre consente di rendere la formattazione opzionale, o addirittura di scegliere tra diversi formattatori. Tuttavia, per altri utenti, la risposta di Ceki potrebbe adattarsi meglio perché è più trasparente e consente di risparmiare risorse. – Wolfgang