2010-04-09 7 views
7

Google guice ha un built-in logger binding. Ma cosa succede se voglio usare un logger di comuni-log o log4j?Come ottenere google guice per iniettare un programma di registrazione personalizzato, ad esempio un logger di registrazione delle commons o log4j

Posso ottenere Guice per iniettare un registro creato da

LogFactory.getLog(CLASS.class) 

Ma avere lo stesso comportamento in built-in di legame:

Il legame imposta automaticamente il nome del registratore al nome di la classe in cui viene iniettato il Logger ..


Ha senso? O urlo, io uso semplicemente il java logger incorporato? O semplicemente usi la registrazione commons senza iniezioni?

+0

No, ha senso. Log4j supporta più livelli di registrazione e ha più appender disponibili, quindi è preferibile utilizzarlo al posto del logger incorporato. –

risposta

11

La pagina CustomInjections sul wiki di Guice descrive esattamente come iniettare un programma di registrazione denominato dalla classe in cui viene iniettato.

+0

Bel collegamento. Una specie di processo doloroso, ma comunque funzionale. –

+0

Grazie per il link. Ha funzionato per me. Ho usato questa strategia per implementare una soluzione SLF4J. –

+3

Per tutti coloro che sono confusi sulla classe InjectLogger nell'esempio: Creare semplicemente una classe di Annotazione vuota denominata "InjectLogger" nel progetto. Non è una dipendenza esterna (è quello che ho assunto per primo). –

1

È la vostra scelta. Ho usato con successo logback con Guice usando il metodo dettagliato sul wiki.

Dai uno sguardo al progetto sli4j. Potrebbe essere utile.

0

Guice è molto utile per l'iniezione di diverse implementazioni di un'interfaccia. Questo non è il caso in quanto le diverse implementazioni di registrazione là fuori hanno tutte API diverse.

Se si desidera poter scambiare l'implementazione di registrazione effettiva in un secondo momento durante lo sviluppo su un'interfaccia, utilizzare commons logging o slf4j.

+0

Hibernate utilizza SLF4J e ho integrato entrambi in un'applicazione basata su Guice senza problemi, quindi posso consigliarlo, anche se non ho giocato con la registrazione di comuni. –

0

Anche se non è possibile ignorare la condizione java.util.logging.Logger logger, si associa un nuovo logger, proprio come si farebbe con qualsiasi altra classe:

bind(Log.class).to(LogFactory.getLog(YourClass)); // or toInstance(...); 

Ma, la creazione di un logger di nome sta per essere un po 'più difficile.

Se si scava il codice di Google Guice (u til.BinderImpl.java:87), è possibile vedere come assegna un nome di classe distinto per ogni istanza del programma di registrazione che viene iniettata. Tuttavia, non l'ho ispezionato abbastanza attentamente per sapere se è facilmente riproducibile.

Potrebbe essere possibile creare un fornitore o iniettare una fabbrica che in qualche modo ha accesso al contesto in modo da poter fornire un logger nominato.

+0

Non lo capisco. Se si definisce esplicitamente YourClass in binder, si ottengono i registri della stessa classe per l'intera applicazione. –