Trui, ik vindt het ook best wel lelijk en zou het liever gewoon helemaal niet zien hoeven.
Op het moment dat je dit goed kan wegstoppen dan levert het een voordeel op. Door het toevoegen van varargs aan java 5 kan je het mooi wegstoppen in de aanroep van de log methode en dan is de hele if ook overbodig geworden. Ik geloof dat SLF4J daar ook al rekening mee houdt
Java:
1
| LOG.fine("bericht %s", duurObject) |
Het enige probleem is je duurObject.toString(), die toString() zou niet duur mogen zijn!
Da's niet eens zo'n verkeerd idee / concept, even onthouden.
En ja, toString() hoeft niet duur te zijn, maar het is wel een performance hit die, hoe meer je logt, hoe groter wordt. Zelfs een optimale toString heeft een objectinstantiatie, een aantal functieaanroepen en een operatie die alles aan elkaar knoopt. Een lazy-loading toString die zijn stringrepresentatie slechts éénmaal aanmaakt en onthoudt (dat kan met immutable objects) heeft geheugengebruik.
iig, punt is, hoe triviaal iets ook is, het is nog altijd beter om het niet aan te roepen dan wel en er niks mee te doen.
quote: Woy
Is het niet handiger om die check niet op de plek van je logging te doen, maar gewoon in je logger? Dat maakt je code wel een stuk overzichtelijker.
Dat gebeurt idd, echter voordat je programma op die controle binnen die functie komt heeft hij al de toString() aangeroepen en het resultaat aan het te loggen stukje tekst geplakt. Neem ik aan, tenminste, voor hetzelfde is de JIT slim genoeg om te zien dat er uiteindelijk niks met dat stukje tekst gedaan wordt en skipt hij die hele aanroep.
Wat Janoz zegt, dus

.
En disclaimer, natuurlijk was het maar een voorbeeld, in de praktijk gebruik je alleen logging voor debugger-loze debugging en voor relevante informatie. Had het laatst toegepast om om een functie genaamd 'prettyPrint()' te gaan, en prettyPrint() vertrouw ik niet mbt performance

.