2015-04-24 20 views
7

Sto iniziando con un nuovo progetto e ho fatto alcune considerazioni sulla registrazione. Ho sempre usato il modello in cui ogni classe, in cui si fa la registrazione, ha un proprio Logger statica:Registrazione Java - Wrapper?

private static final Logger logger = Logger.getLogger(LoggingInterceptor.class); 

io non piace molto questo approccio come devo copiare questa linea in ogni classe dove registrerà qualcosa . Ho preso in considerazione l'utilizzo dell'approccio Android in cui è presente la classe Log con i suoi metodi statici da registrare. Ho iniziato a cercare su internet un approccio simile fatto da qualcun altro, ma non ho trovato nulla.

Quindi la mia domanda è: quali potrebbero essere gli svantaggi di questo approccio?

Non riesco a pensare ad alcuno ma piuttosto ad alcuni vantaggi, poiché segue il modello DRY. Le diverse categorie potrebbero essere gestite come in Android con 'tag', che sono parametri dei metodi di registro statico. Per esempio:

Log.debug(tag, message, exception); 

La classe Log sé sarebbe quindi utilizzare un quadro comune di registrazione, come Log4j o addirittura SLF4J.

Quindi sono interessato alle vostre opinioni.

+0

FWIW, Play Framework 2 utilizza un approccio simile. – smk

+2

"[...] segue lo schema DRY"? Al contrario! Il tuo approccio suggerito ti obbliga a specificare sempre un tag, mentre il recupero di un logger per la classe (o la categoria) in una variabile finale statica lo specifica solo una volta. Cosa succede quando decidi di cambiare la categoria? – Seelenvirtuose

+0

Sì, potrebbe essere un punto. Ma cosa succede se si registra una dichiarazione per un altro tag? Considerando che i tag non vengono utilizzati solo per specificare la classe in cui viene inserito il log, ma forse un sottosistema del sistema. Quindi potresti voler raggruppare alcuni registri di sottosistemi realizzati in più classi. – homedom

risposta

2

Basato sul java.util.logging.Logger API e this article, la ragione principale per getLogger() è quello di garantire la stessa Logger e Handler set sono utilizzati indipendentemente tra sottosistemi.

La soluzione consigliata di Java è ottenere Logger nella parte superiore di ciascun file e quindi accedere a quell'oggetto ogni volta che è necessario.

Utilizzando una statica Log.debug richiederebbe tag da lavorare ogni volta modo che la corretta Handler set è stato utilizzato. Pertanto, sarebbe meno efficiente dell'avere pronto l'oggetto Log.

Tuttavia, se non si utilizza handlers o non si effettua la differenziazione tra sottosistemi, le funzioni statiche rappresenterebbero un collegamento ragionevole, a condizione che la libreria utilizzata soddisfi le proprie esigenze.