log4j vs logback [chiuso]


152

Stiamo usando log4j dietro un wrapper fatto in casa. Abbiamo in programma di utilizzare molte più funzionalità ora.

Dovremmo aggiornare al logback?

(Intendo il quadro non una facciata come SLF4J)


1
il logback sembra molto simile alla registrazione dei beni comuni di Jakarta - quali sono le principali differenze?
opaco b

12
SLF4J (che è la facciata) sembra simile a commons.logging. La differenza principale è che SLF4J utilizza l'associazione statica mentre commons.logging utilizza una strategia di risoluzione. Il logback (l'implementazione "nativa" (ovvero non esiste un ulteriore strato di wrapper) della facciata) è paragonabile a LOG4J ma ha un'API più ricca.
Huxi,

Risposte:


190

Il logback implementa nativamente l'API SLF4J. Ciò significa che se si utilizza il logback, si sta effettivamente utilizzando l'API SLF4J. In teoria è possibile utilizzare direttamente gli interni dell'API di logback per la registrazione, ma ciò è altamente sconsigliato. Tutta la documentazione di log-back e gli esempi sui logger sono scritti in termini di API SLF4J.

Quindi, usando il logback, in realtà useresti SLF4J e se per qualsiasi motivo volessi tornare a log4j, potresti farlo in pochi minuti semplicemente facendo cadere slf4j-log4j12.jar sul tuo percorso di classe.

Quando si esegue la migrazione dal logback a log4j, le parti specifiche del logback, in particolare quelle contenute nel file di configurazione logback.xml , devono comunque essere migrate al suo equivalente log4j, ovvero log4j.properties . Quando si esegue la migrazione nell'altra direzione, la configurazione di log4j, ovvero log4j.properties , dovrebbe essere convertita nel suo equivalente di logback. C'è uno strumento online per quello. La quantità di lavoro necessaria per la migrazione dei file di configurazione è molto inferiore a quella necessaria per migrare le chiamate dei logger diffuse in tutto il codice sorgente del software e le sue dipendenze.


28
È una vera opportunità per parlare con lo sviluppatore di un software così popolare. Grazie Ceki per log4j.
Srujan Kumar Gulla,

7
Disclaimer: questo ragazzo è lo sviluppatore originale di tutti i Log4j, SLF4J e Logback. Ma non funziona più per Log4j.
Victor Stafusa,

56

Dovresti? .

Perché? Log4J è stato sostanzialmente deprecato da Logback .

È urgente? Forse no.

È indolore? Probabilmente, ma potrebbe dipendere dalle tue dichiarazioni di registrazione.

Si noti che se si desidera sfruttare appieno LogBack (o SLF4J), è necessario scrivere le istruzioni di registrazione appropriate . Ciò produrrà vantaggi come codice più veloce a causa della valutazione pigra e meno righe di codice perché è possibile evitare le protezioni.

Infine, consiglio vivamente SLF4J. (Perché ricreare la ruota con la tua facciata?)


48
Nota: il progetto log4j non considera obsoleto log4j.
Thorbjørn Ravn Andersen,

17
La terminologia dovrebbe essere chiarita; inequivocabilmente, l' autore del progetto log4j considera il logback il successore di log4j. È lo stesso autore di entrambi i progetti, quindi la sua opinione dovrebbe avere un certo peso; il "progetto log4j" in sé non "considera" nulla. L'attuale gruppo di persone associate a log4j ha opinioni divergenti (alcuni in realtà sono d'accordo, altri non sono sorprendentemente in disaccordo). Con un po 'più di storia alle spalle (3 anni dopo il commento originale), SLF4J + Logback continua a guadagnare terreno su Log4j.
michael

@michael_n Nota: Log4j 1 NON è stato scritto da una sola persona. È sbagliato dire lo "stesso autore". Ceki è un autore importante, senza dubbio, ma non l'unico. In effetti molte persone hanno contribuito a rendere Log4j 1 quello che è.
Christian,

@Christian "NON è stato scritto ..." ovviamente, che dovrebbe essere implicito per qualsiasi progetto apache maturo (e la mia qualifica, "l'attuale gruppo di persone associate a log4j"); tuttavia, se potessi modificare il commento, direi " originariamente creato", come afferma anche l'articolo di Wikipedia. Ri: "In effetti molte persone hanno contribuito a rendere Log4j 1 quello che è" , questo è assolutamente, equamente vero (vale a dire, nel bene e nel male); e anche, in qualche modo, ha contribuito alla nascita di slf4j + logback :-)
michael

3
Quindi, cosa c'è dentro per tutti voi che state combattendo su questa o quella libreria di registrazione? Perché stiamo cercando di uccidere / promuovere le biblioteche? Almeno fornire un ragionamento razionale PERCHÉ l'uno è migliore dell'altro. Dio, Stack Overflow è un casino.
Utente

48

Nel mondo del logging ci sono facciate (come Apache Commons Logging, slf4j o persino l'API Log4j 2.0) e implementazioni (Log4j 1 + 2, java.util.logging, TinyLog, Logback).

Fondamentalmente dovresti sostituire il tuo wrapper selfmade con slf4j IF e solo SE non sei soddisfatto per qualche motivo. Mentre Apache Commons Logging non fornisce realmente un'API moderna, slf4j e la nuova facciata Log4j 2 lo forniscono. Dato che un sacco di app usano slf4j come wrapper, potrebbe avere senso usarlo.

slf4j fornisce un certo numero di zucchero API, come questo esempio dai documenti slf4j:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

È una sostituzione variabile. Questo è supportato anche da Log4j 2.

Tuttavia, è necessario essere consapevoli del fatto che slf4j è sviluppato da QOS che mantiene anche il logback. Log4j 2.0 è disponibile in Apache Software Foundation. Negli ultimi tre anni una comunità vivace e attiva è cresciuta di nuovo lì. Se apprezzi l'Open Source come viene fatto dalla Apache Software Foundation con tutte le sue garanzie, potresti riconsiderare l'utilizzo di slf4j in favore dell'utilizzo diretto di Log4j 2.

Notare che:

In passato log4j 1 non veniva mantenuto attivamente mentre Logback lo era. Ma oggi le cose sono diverse. Log4j 2 è attivamente gestito e viene rilasciato con una pianificazione quasi regolare. Include anche molte funzionalità moderne e -imho- rende un paio di cose migliori di Logback. A volte è solo una questione di gusti e dovresti trarre le tue conclusioni.

Ho scritto una rapida panoramica delle nuove funzionalità di Log4j 2.0: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html

Durante la lettura vedrai che Log4j 2 è stato ispirato da Logback ma anche da altri framework di registrazione. Ma la base di codice è diversa; non condivide quasi nulla con Log4j 1 e zero con Logback. Ciò ha portato ad alcuni miglioramenti come nell'esempio Log4j 2 funziona con bytestreams invece che con Stringhe sotto il cofano. Inoltre non perde eventi durante la riconfigurazione.

Log4j 2 può accedere con una velocità superiore rispetto ad altri framework che conosco: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

Eppure la comunità di utenti sembra essere molto più grande di Logbacks: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

Detto questo, l'idea migliore è scegliere i framework di registrazione che si adattano meglio a ciò che si desidera ottenere. Non cambierei un framework completo se disabilitassi la registrazione nell'ambiente di produzione ed eseguissi semplicemente la registrazione di base nella mia app. Tuttavia, se si fa un po 'di più con la registrazione, basta guardare le funzionalità fornite dai framework e dai loro sviluppatori. Mentre ricevi supporto commerciale per Logback tramite QOS (ho sentito) non esiste attualmente alcun supporto commerciale per Log4j 2. D'altra parte, se hai bisogno di fare la registrazione di controllo e hai bisogno di prestazioni elevate fornite dagli appendici asincrone, ha molto senso controlla log4j 2.

Si noti che nonostante tutto il comfort che offrono, le facciate mangiano sempre una piccola prestazione. Forse non ti sta affatto influenzando, ma se hai poche risorse potresti dover salvare tutto ciò che puoi avere.

Senza conoscere meglio le tue esigenze è quasi impossibile dare una raccomandazione. Solo: non cambiare solo perché molte persone cambiano. Passa solo perché ne vedi il valore. E l'argomento secondo cui log4j è morto non conta più. È vivo e fa caldo.

NOTA BENE: Attualmente sono VP, Apache Logging Services e sono coinvolto anche in log4j.


19

Non rispondendo esattamente alla tua domanda, ma se potessi allontanarti dal tuo wrapper fatto da te, allora c'è Simple Logging Facade for Java (SLF4J) a cui Hibernate è ora passato (invece della registrazione comune).

SLF4J non presenta nessuno dei problemi del caricatore di classe o perdite di memoria osservate con Jakarta Commons Logging (JCL).

SLF4J supporta la registrazione JDK, log4j e il logback. Quindi, dovrebbe essere abbastanza facile passare da log4j al logback quando è il momento giusto.

Modifica: Aplogie che non mi ero chiarito. Stavo suggerendo di usare SLF4J per isolarti dal dover fare una scelta difficile tra log4j o logback.


3
Conosco SLF4J. Ma ho chiesto il framework di registrazione non per la facciata!

4
Scuse. Quello che stavo suggerendo era che se stessi usando SLF4J invece della tua facciata personalizzata, passare da log4j a logback sarebbe meno doloroso?
toolkit,

Qual è la fonte di tale citazione? La registrazione Commons è un componente collaudato. Non ho mai avuto perdite di memoria con esso.
Kshitiz Sharma,

1
@KshitizSharma - dal collegamento alla documentazione SLF4J che ho fornito: slf4j.org/manual.html
toolkit

13

La tua decisione dovrebbe essere basata su

  • il tuo reale bisogno di queste "più funzionalità"; e
  • il costo previsto per l'implementazione della modifica.

Dovresti resistere alla tentazione di cambiare API solo perché è "più nuovo, più lucido, migliore". Seguo una politica di "se non è rotto, non calciarlo".

Se l'applicazione richiede un framework di registrazione molto sofisticato, è possibile considerare il perché.


3

Il progetto maturo o persino il progetto in profondità nelle fasi di sviluppo probabilmente perderebbe più di un guadagno da tale aggiornamento, IMHO. Il logback è sicuramente molto più avanzato in una serie di punti, ma non in misura per la completa sostituzione in un sistema funzionante. Considererei sicuramente il logback per un nuovo sviluppo, ma log4j esistente è abbastanza buono e maturo per tutto ciò che è già stato rilasciato e incontrato l'utente finale. Questo è molto soggettivo, dovresti vedere costare te stesso.

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.