Leggendo un bel articolo relativo ad una best practice di log4j per migliorare le performance, riporto qui la best practice:

Molte volte si utilizza la tipica stringa per stampare un log

log.debug("Ciao mi chiamo: " + nome);

In realtà si dovrebbe scrivere nel seguente modo:

if(log.isDebugEnabled()) log.debug("Ciao mi chiamo: " + nome);

Il secondo esempio è più conveniente del primo in quanto il primo esempio genera comunque la stringa, anche se il logger è disabilitato, utilizzando perciò inutilmente risorse.

Sempre nella stessa pagina (a opera di Peter Levart) è presente un bell’esempio di come migliorare questa best practice utilizzando la seguente porzione di codice:

   private static final Log log = LogFactory.getLog(LogTest.class);
   private static final boolean DEBUG_ENABLED = log.isDebugEnabled();

   public void LOG()
   {
      if (DEBUG_ENABLED)
         log.debug("Ciao mi chiamo: " + nome + " e sono piu veloce di prima");

   }

Questo perchè l’informazione sullo stato booleano del log viene caricato la prima volta ed utilizzato come una costante.

Nel caso in cui si voglia invece settare questo controllo per esempio per i casi INFO o ERROR, sarà necessario utilizzare la seguente notazione:

   private static final Log log = LogFactory.getLog(LogTest.class);
   private static final boolean ERROR_ENABLED = log.isEnabledFor(Level.ERROR);

   public void LOG()
   {
      if (ERROR_ENABLED)
         log.error("Ciao mi chiamo: " + nome + " e sono piu veloce di prima");
   }

 

Annunci