logo

Log4j contro SLF4J

SLF4J (Fascia di registrazione semplice per Java) è un'API progettata per fornire accesso generico a molti framework di registrazione, tra cui log4j.

È fondamentalmente uno strato di astrazione. Non è un'implementazione di registrazione. Significa che se stai scrivendo una libreria e usi SLF4J, puoi dare quella libreria a qualcun altro da utilizzare e loro possono scegliere quale implementazione di registrazione utilizzare con SLF4J, ad esempio log4j o l'API di registrazione Java. Viene utilizzato per impedire che le applicazioni dipendano da API di registrazione diverse proprio come utilizzano librerie che dipendono da esse.

Tuttavia, elaboriamo la differenza tra Log4J e SLF4J che merita una sola riga di risposta. cioè, la domanda stessa è sbagliata. SLF4J e Log4J sono diversi o non sono componenti simili. Come specificato dal nome, SLF4J è una semplice facciata di registrazione per Java. Non è un componente di registrazione e non esegue nemmeno la registrazione vera e propria. È solo un livello di astrazione per un componente di registrazione sottostante.

In caso di Log4j , è un componente di registrazione ed esegue la registrazione richiesta. Quindi possiamo dire che SLF4J e Log4J sono logicamente due cose diverse.

Log4j contro SLF4J

Ora devi solo selezionare quale framework di registrazione utilizzare in runtime. Per questo, dovrai includere due file jar:

  • File jar di rilegatura SLF4J
  • File jar del framework di registrazione desiderati

Ad esempio, per utilizzare log4j nel tuo progetto, dovrai includere i file jar indicati di seguito:

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

Una volta inseriti entrambi i file jar nel classpath dell'applicazione, SLF4J lo rileverà automaticamente e inizierà a utilizzare log4j per elaborare le istruzioni di log in base alla configurazione fornita nel file di configurazione log4j.

Ad esempio, di seguito il codice che puoi scrivere nel file di classe del progetto:

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info('Hello World'); } } 

Perché SLF4J é meglio di Log4J?

È sempre difficile preferirne uno tra SLF4J e Log4j. Se hai una scelta, ti suggerirei; l'astrazione del logging è sempre preferibile rispetto al framework del logging. Se utilizzi un'astrazione di registrazione, SLF4J in particolare, possiamo migrare a qualsiasi framework di registrazione richiesto al momento della distribuzione senza optare per una dipendenza singola.

Di seguito sono riportati i motivi sufficienti per scegliere SLF4J rispetto a Log4j:

  • È sempre meglio usare l'astrazione.
  • SLF4J è una libreria open source o libreria interna che la rende indipendente da qualsiasi particolare implementazione di registrazione, il che significa che non è necessario gestire più configurazioni di registrazione per più librerie.
  • SLF4J fornisce la registrazione basata su segnaposto, che migliora la leggibilità del codice rimuovendo controlli come isInforEnabled(), isDebugEnabled(), ecc.
  • Utilizzando il metodo di registrazione di SLF4J, rimandiamo il costo di costruzione dei messaggi di registrazione (stringa), finché non ne hai bisogno, il che è efficiente sia in termini di CPU che di memoria.
  • Poiché SLF4J utilizza un numero inferiore di stringhe temporanee, significa meno lavoro per il garbage collector, il che significa throughput e prestazioni migliori per la tua applicazione.

Quindi, in sostanza, SLF4J non sostituisce log4j; entrambi lavorano insieme. Rimuove la dipendenza da log4j dalla tua applicazione e ne facilita la sostituzione in futuro con la libreria più capace.