2012-03-16 20 views
18

Sto scrivendo una libreria che raccoglie varie funzioni che utilizzerò in diverse applicazioni. Voglio che generi istruzioni di registro visibili per l'utente della libreria, ad esempio, se sto creando un'applicazione e sto utilizzando la libreria, voglio che la libreria generi istruzioni di registro visibili a me. Come lo faccio? Dal momento che il file di registro sarà configurato dallo sviluppatore dell'applicazione, in che modo la mia biblioteca saprà come effettuare il log?Logger per libreria Java

+0

Dai uno sguardo al quadro di primavera. Nello specifico, la capacità di iniezione delle dipendenze è la parte più utile per te. – cdeszaq

risposta

23

se si sta sviluppando un libreria gli altri includeranno nella loro applicazione è necessario utilizzare un accedendo facciata. Altrimenti imponi agli utenti della tua biblioteca di configurare e includere il framework di registrazione che hai scelto in aggiunta al framework che hanno scelto per la loro applicazione.

Per esempio, se si utilizza log4j ma lo sviluppatore utilizzando la libreria utilizza logback dovrà includere un file di configurazione log4j e il vaso log4j (o prendere other measures) per fare la vostra libreria felice.

Facciate registrazione risolvono questo problema (da Apache Commons Logging):

Quando si scrive una libreria è molto utile per registrare le informazioni. Tuttavia ci sono molte implementazioni di logging là fuori, e una libreria non può imporre l'uso di una particolare sull'applicazione complessiva di cui la libreria fa parte.

Il pacchetto di registrazione è un ponte ultrasottile tra diverse implementazioni di registrazione. Una libreria che utilizza l'API di registrazione delle commons può essere utilizzata con qualsiasi implementazione di registrazione in fase di esecuzione. Il logging dei comuni viene fornito con il supporto per una serie di popolari implementazioni di registrazione e la scrittura di adattatori per gli altri è un compito ragionevolmente semplice.

O il ragionamento da SLF4J:

La facciata registrazione semplice per Java o (SLF4J) funge da semplice facciata o di astrazione per vari quadri di registrazione, ad esempio, java.util.logging, log4j e logback, che consentono all'utente finale di collegare il framework di registrazione desiderato al momento di distribuzione .

I candidati per le facciate di registrazione sono:

Personalmente lo consiglio SLF4J (con Logback).

+0

Il tuo esempio è fuorviante. Lo sviluppatore può utilizzare l'API SLF4J per il codice e l'adattatore log4j per terze parti allo stesso tempo. Quindi sceglie solo un backend SLF4J come il logback. In realtà questo è un motivo per SLF4J, è così semplice. Non è necessaria alcuna configurazione di log4j. –

+0

@RostislavMatl Stai parlando dei "moduli di bridging" di SLF4J (http://www.slf4j.org/legacy.html)? Questi ti permettono di usare una libreria che usa log4j, ... internamente e reindirizzare i suoi messaggi di log a SLF4J (che potrebbe essere supportato da logback). Questa è certamente una grande caratteristica se sei l'UTENTE di una biblioteca. Tuttavia, quando sei lo SVILUPPATORE di una biblioteca, perché dovresti costringere i tuoi utenti a saltare attraverso questi cerchi? Perché non usare una facciata direttamente? Poiché la pagina SLF4J afferma che queste soluzioni sono "appropriate per software fuori dal tuo controllo". Per favore correggimi se ti ho frainteso. – Joe23

+0

Apparentemente parliamo di cose diverse. Hai scritto: "se usi log4j ma lo sviluppatore che usa la tua libreria utilizza la registrazione, dovrà includere una configurazione di log4j" - non è vero. Ed è una cattiva soluzione allo stesso tempo. Non ho detto che non è possibile utilizzare SLF4J mentre si sviluppa un nuovo codice. Ho scelto il punto o la vista dell'utente della libreria perché sarai più spesso l'utente che il creatore. –

2

L'ubicazione del file di registro è impostata all'esterno del pacchetto, in una configurazione del framework di registrazione. Il file di configurazione è in genere su classpath. Il suo aspetto dipende da quale framework di logging si usa - io consiglio di andare con SLF4J e Logback.