Dipendenza della registrazione Java per una libreria di basso livello

4

Ho ereditato una libreria di rete Java open source di livello inferiore. La libreria è destinata ad essere utilizzata da librerie di protocolli applicativi di livello superiore che sono a loro volta utilizzate dal codice dell'applicazione. La mia libreria, come lasciata dal precedente manutentore, non ha dipendenze ed è costruita tramite Ant. L'artefatto di costruzione è un semplice vaso che altri possono inserire nei loro progetti.

Sono in procinto di convertire la libreria da costruire con Maven. Mentre sto facendo questo, sto considerando possibilmente l'aggiunta di slf4j come dipendenza. Attualmente, quando qualcosa va storto, stack trace o altre informazioni vengono sputate su System.out o System.err. So che non è sempre molto utile, ma queste uscite si verificano solo da 10 a 15 posizioni nel codice e vengono eseguite raramente.

Quindi cosa ne pensi? Mantenere la libreria semplice con le dipendenze zero o introdurre slf4j?

    
posta dhalsim2 30.01.2015 - 21:29
fonte

3 risposte

5

Se utilizzi il plug-in Maven Assembly , puoi includere il jar slf4j (insieme a qualsiasi altro implementazione che preferisci) inside il tuo jar distribuito. Ci sono opzioni più complicate se si desidera consentire agli utenti di scegliere la libreria di registrazione, ma funzionerà perfettamente se si crea un vaso grasso con o senza l'implementazione slf4j.

Gli utenti hanno molte più probabilità di essere infastiditi - a meno che lo spazio del disco rigido sia davvero (e intendo davvero) a un livello premium - se devono gestire System.out e System.err di output rispetto a un framework di registrazione fornito, anche se è solo l'implementazione no-op predefinita e deve aggiungere log4j o logback se vogliono vedere i log.

    
risposta data 30.01.2015 - 22:43
fonte
5

La codifica dell'API SLF4J non impone la dipendenza dagli utenti della libreria. Dalla guida per l'utente :

As of SLF4J version 1.6.0, if no binding is found on the class path, then slf4j-api will default to a no-operation implementation discarding all log requests.

...

Embedded components such as libraries or frameworks should not declare a dependency on any SLF4J binding but only depend on slf4j-api. When a library declares a transitive dependency on a specific binding, that binding is imposed on the end-user negating the purpose of SLF4J. Note that declaring a non-transitive dependency on a binding, for example for testing, does not affect the end-user.

    
risposta data 30.01.2015 - 21:34
fonte
1

Spesso preferisco standard e abbastanza buono nel migliore dei casi. Potrebbe esserci un argomento "less is more" per l'utilizzo della registrazione Java inclusa:

link

    
risposta data 31.01.2015 - 00:09
fonte

Leggi altre domande sui tag