Java Logging vs Log4J [chiuso]


134

Vale ancora la pena aggiungere la libreria log4j a un progetto Java 5 solo per accedere, diciamo alcune eccezioni a un file con alcune impostazioni di rollover. O lo farà anche la funzione standard util.logging?

Cosa ne pensi?


Vedere stackoverflow.com/a/13144054/603516 per numerosi problemi di blocco di log4j 1.2 da considerare.
Vadzim,

Risposte:


115

Direi che probabilmente stai bene con util.logging per le esigenze che descrivi.

Per un buon albero decisionale, dai un'occhiata a Log4j vs java.util.logging

Domanda 1: Prevedete la necessità di qualcuno dei gestori intelligenti che Log4j non ha JUL, come SMTPHandler, NTEventLogHandler o uno dei FileHandlers molto convenienti?

Domanda due: ti vedi voler cambiare frequentemente il formato dell'output di registrazione? Avrai bisogno di un modo semplice e flessibile per farlo? In altre parole, hai bisogno del PatternLayout di Log4j?

Domanda tre: Prevedi una necessità definitiva per la capacità di modificare configurazioni di registrazione complesse nelle tue applicazioni, dopo che sono state compilate e distribuite in un ambiente di produzione? La tua configurazione suona come "I messaggi gravi di questa classe vengono inviati via e-mail al ragazzo del supporto; i messaggi gravi di un sottoinsieme di classi vengono registrati in un demone syslog sul nostro server; vengono registrati i messaggi di avviso di un altro sottoinsieme di classi a un file sull'unità di rete A; e quindi tutti i messaggi provenienti da ogni parte vengono registrati in un file sull'unità di rete B "? E ti vedi modificare ogni due giorni?

Se puoi rispondere di si a una qualsiasi delle domande precedenti, vai con Log4j. Se si risponde a un preciso no a tutti, JUL sarà più che adeguato ed è convenientemente già incluso nell'SDK.

Detto questo, praticamente ogni progetto in questi giorni sembra finire compreso log4j, anche se solo perché viene utilizzato da qualche altra libreria.


1
Ottima risposta basata su questionario. A ciascuno il suo in base alle esigenze.
HopeKing

43

Ti consiglio di utilizzare la Simple Logging Facade per Java (SLF4J). Supporta diversi provider che includono Log4J e possono essere utilizzati in sostituzione di Apache Commons Logging.


6
Cosa c'è di sbagliato in Commons Logging?
Bart van Heukelom,

5
@Bart van Heukelom e commenta gli utenti - leggi articoli.qos.ch/thinkAgain.html
Stephen C

4
@Stephen C: Grazie per le informazioni, anche se l'ho imparato qualche tempo fa e ora sto usando SLF4J ogni volta che posso. (Il mio commento è stato una vera domanda tra l'altro, non un'osservazione conservatrice)
Bart van Heukelom,

1
@Bart, Commons Logging utilizza il rilevamento dinamico del pacchetto da utilizzare. L'uso di SLF4J (o utilizzato per) necessita del caricamento delle classi nel back-end.
Thorbjørn Ravn Andersen,

21

Log4j è in circolazione da molto tempo e funziona molto bene. Non ho studi scientifici a supporto, ma sulla base di ciò che ho visto su un gran numero di clienti, è facilmente il framework di registrazione che vedo usato più di ogni altro. È in circolazione da molto tempo e non è stato sostituito dal Next Big Logging Framework, che dice qualcosa.

È semplicissimo da configurare e facile da apprendere le appendici di base (output). Sono disponibili interi appendici host, tra cui:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

Più altri. Non è difficile nemmeno scrivere il proprio appender. Inoltre, c'è una grande flessibilità in ciascuna appendice che ti consente di controllare in modo specifico ciò che viene prodotto nel tuo registro.

Una nota, ho avuto una serie di problemi con il classloader quando ho usato la registrazione di Apache Commons oltre a log4j. Era solo per un'applicazione specifica, ma ho trovato più semplice usare solo log4j, piuttosto che avere la flessibilità offerta quando si utilizza un livello di astrazione come la registrazione dei beni comuni.

Vedi questo articolo per maggiori dettagli :

In bocca al lupo!


17

java.util.logging offre un pacchetto di registrazione completo senza il bagaglio in eccesso fornito da alcuni degli altri.


5
Inoltre, è incluso per impostazione predefinita e utilizzato da Java stesso (quindi lo avrai comunque!)
Ha QUIT - Anony-Mousse

7

log4j è un pacchetto molto più bello in generale e non ha alcuni dei singhiozzi che contiene java.util.logging. Secondo, usare direttamente log4j è più semplice che usare la registrazione dei beni comuni.


3
Puoi per favore essere più specifico sui singhiozzi che ha java.util.logging?
alkber

Certo, come l'overhead nella registrazione dei metodi sincronizzati: vedi github.com/playframework/playframework/issues/6958 e bugs.openjdk.java.net/browse/JDK-8077846
Will Sargent

4

Raccomando di usare Apache Commmons Logging come interfaccia di registrazione. In questo modo hai la flessibilità di cambiare le implementazioni di registrazione ogni volta che vuoi senza richiedere modifiche al codice da parte tua.


3

Vorrei andare con log4j. Le possibilità con log4j non sono affatto obsolete!

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.