2013-02-05 21 views
5

È una buona cosa da fare; accedere tramite un metodo come questo?Metodo di registrazione generico

public static void log(final Object... messages) { 
    logger.info(Joiner.on(',').useForNull("null").join(messages)); 
} 

// Dove in altre parti del codice possiamo chiamare il metodo logger utilizzando virgole anziché di concatenazione di stringhe. Nota che Joiner è una classe di guava.

log(" Check ",obja.getXXX(),anotherObject.getMethod()); 

L'aspettativa è codice pulito, convenienza e prestazioni.

+2

Vorrei aggiungere un secondo parametro che consente di specificare la gravità del registro. – Zylth

risposta

2

Probabilmente vorrai unirti allo ' ' (vuoto) invece di virgola ma l'approccio al design è una buona idea.

Per quanto riguarda le prestazioni, non è l'ideale. Crei un array di oggetti aggiuntivo e un joiner più i buffer interni del joiner.

Così puoi ottenere 2 di 3 con questo approccio. Se ti interessa davvero le prestazioni, utilizza slf4j che utilizza già un approccio simile.

4

Uso l'interfaccia SLF4J's Logger (con implementazione Logback), che trovo molto più pulita da leggere.

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class Test { 
    private static final Logger logger = LoggerFactory.getLogger(Test.class); 

    public void method(String name, int age, Address address) { 
     logger.info("Person {}, age {} years old resides at {}", name, age, address); 
    } 
} 
+0

+1 Mi piacerebbe lo stesso. – Alex

+0

@ adarshr Proverò sicuramente SLF4J non appena ne avrò la possibilità. ty. – r0ast3d

2

L'interfaccia di SLF4J è migliore, come altre risposte dicono.

Non capisco come questo sia un miglioramento delle prestazioni. Forse l'OP ha in mente un caso d'uso specifico e qualche codice di esempio lo spiegherebbe. Se l'idea è di raccogliere i messaggi in anticipo e inviarli insieme a un richiamo del metodo di registrazione, allora ti conviene utilizzare un appender che fa il buffering.