È necessario accedere dal codice della libreria?


38

Se sto sviluppando una libreria Java, è buona norma emettere istruzioni di registro all'interno del codice della libreria?

La registrazione all'interno della libreria renderà più trasparenti il ​​debug e la risoluzione dei problemi. Tuttavia, d'altra parte, non mi piace sporcare il mio codice di libreria con le istruzioni di registrazione. Ci sono anche implicazioni sulle prestazioni da considerare?


Risposte:


33

Si, dovresti. L'uso di una facciata di registrazione come SLF4J offre flessibilità senza gravare gli utenti con un particolare framework di registrazione.

Gli autori di componenti e librerie ampiamente distribuiti possono codificare sull'interfaccia SLF4J per evitare di imporre un framework di registrazione all'utente finale del componente o della libreria. Pertanto, l'utente finale può scegliere il framework di registrazione desiderato al momento della distribuzione inserendo l'associazione slf4j corrispondente sul percorso di classe, che può essere modificata in seguito sostituendo un'associazione esistente con un'altra sul percorso di classe e riavviando l'applicazione. Questo approccio ha dimostrato di essere semplice e molto robusto.

Inoltre, se i tuoi utenti non includono un vaso SLF4J (dalla guida per l' utente ):

A partire dalla versione 1.6.0 di SLF4J, se non viene trovato alcun bind sul percorso della classe, allora slf4j-api passerà per impostazione predefinita a un'implementazione senza operazioni che elimina tutte le richieste di registro.

Se sei preoccupato per le conseguenze sulle prestazioni della registrazione, dai un'occhiata a questa domanda frequente su SLF4J . L'idea è di fornire parametri per registrare le istruzioni invece di aggiungerle in una stringa inline:

Le seguenti due righe produrranno esattamente lo stesso output. Tuttavia, il secondo modulo supererà il primo modulo di un fattore di almeno 30, nel caso di un'istruzione di registrazione disabilitata.

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

SLF4J è un'altra facciata di accesso?

SLF4J è concettualmente molto simile a JCL. Come tale, può essere pensato come l'ennesima facciata di disboscamento. Tuttavia, SLF4J è molto più semplice nel design e probabilmente più robusto. In poche parole, SLF4J evita i problemi del caricatore di classe che affliggono [Jakarta Commons Logging].


Esiste una buona libreria open source che registra nel codice della libreria a cui puoi fare riferimento? così possiamo vedere come è fatto?
user1870400

Il framework Spring è una libreria Java abbastanza nota che lo fa; nel loro caso hanno scelto JCL.
Mike Partridge,

17

, è necessario accedere dal codice della libreria. Non solo ti aiuta a sviluppare, ma le persone che usano la biblioteca lo troveranno utile. Ricorda che puoi sempre impostare i livelli di registrazione in modo da mostrare solo le istruzioni di registro necessarie e che possono fare lo stesso.

Recentemente stavo usando Mybatis , uno strumento ORM open source. Stavo eseguendo il debug di un problema in cui una query che ritenevo avrebbe dovuto essere corretta non restituiva risultati. Era una query con parametri e, dal momento che Mybatis ha la registrazione nel suo codice di libreria, sono stato in grado di accenderlo e vedere la query effettiva in esecuzione. È stato facile dire che ho scambiato due parametri. Senza accedere alla libreria non avrei potuto trovare il problema con la stessa rapidità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.