Domanda

Perché si dovrebbe utilizzare uno dei seguenti pacchetti invece dell'altra?

  • Java Logging
  • Commons Logging
  • Log4j
  • SLF4J
  • Logback
È stato utile?

Soluzione

In ordine cronologico delle api hanno saputo ritrovare (per quanto ne so):

  • Log4j perché la maggior parte ognuno lo utilizza (nella mia esperienza)
  • Commons registrazione perché i progetti open source lo usano (in modo che possano integrarsi con qualsiasi quadro di registrazione è utilizzato nella soluzione integrata); soprattutto valida se sei un API / quadro / OSS e si basano su altri pacchetti che utilizzano Commons Logging.
  • Commons registrazione, perché non si vuole "bloccare" per un particolare quadro di registrazione (così invece si blocca fino a ciò che Commons registrazione ti dà invece) - Non credo che sia ragionevole per decidere di utilizzare questo punto come la ragione.
  • Java logging, perché non si vuole aggiungere in un vaso supplementare.
  • SLF4J perché è più recente rispetto Commons Registrazione e prevede la registrazione con parametri:

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • Logback perché è più recente rispetto a log4j e ancora una volta, supporta la registrazione con parametri, in quanto implementa direttamente SLF4J
  • SLF4J / Logback perché è scritto dalla stessa persona che ha fatto log4j, in modo che ha fatto meglio (secondo Ken G -. E 'grazie sembra adattarsi quando guardando loro precedenti messaggi notizie )
  • SLF4J perché anche pubblicare un adattatore di log4j in modo da non dover "passare fuori" log4j nel codice più vecchio - solo fare log4j.properties usano SLF4J ed è la configurazione

Altri suggerimenti

Trovo login Java per essere fonte di confusione, incoerente, poco documentata, e soprattutto casuale. Inoltre, v'è una quantità enorme di somiglianza tra i quadri di registrazione con conseguente duplicazione degli sforzi, e la confusione su ciò che l'ambiente di registrazione si sono effettivamente in. In particolare, se si lavora in un grave stack applicativo Java Web, si è spesso in più ambienti di registrazione in una sola volta; (Es Hibernate può usare log4j, e tomcat java.util.logging). Apache Commons è destinato a colmare diversi quadri di registrazione, ma in realtà solo aggiunge maggiore complessità. Se non si conosce questo prima del tempo, è assolutamente sconcertante. Perché i miei messaggi di log non stampando alla console, ecc? Ohh perché sto guardando i log Tomcat, e non log4j. Aggiungendo un ulteriore livello di complessità, il server di applicazione può avere configurazioni di registrazione globali che potrebbero non riconoscere configurazioni locali per una particolare applicazione web. Infine, tutti questi quadri di registrazione sono troppo complicato. Registrazione in Java è stato un disastro disorganizzato lasciando sviluppatori come me frustrato e confuso.

Le prime versioni di Java non hanno un built-in quadro di registrazione che porta a questo scenario.

C'è un punto importante che non è stato menzionato in precedenza:

SLF4J (ed entrambi Logback e Log4J come backend di registrazione) il supporto per un contesto di diagnostica cosiddetto mappata (MDC, vedere javadoc e documentazione ).

Questo è essenzialmente un thread-local Map che è possibile utilizzare per aggiungere informazioni di contesto aggiuntivo per il vostro evento di registrazione. Lo stato attuale del MDC è collegato a ogni evento.

Questo può essere incredibilmente utile se si mette roba come il nome utente e l'URL della richiesta (in caso di una webapp) in esso. Questo può essere fatto automaticamente utilizzando un filtro, per esempio.

Si veda anche risposte alla domanda Quali sono le migliori pratiche a registrare un errore , in particolare:?

  • Ci sono un certo potenziale problemi classloading con Commons Registrazione.

  • Log4J e SLF4J sono stati sviluppati da     la stessa persona, imparando da     problemi rilevati in pratica con Log4J.

Nel nostro progetto azienda usiamo Log4J ed è molto facile da usare come Stephen ha mostrato nel suo esempio. Abbiamo anche scritto le nostre classi del modello per Log4J in modo da poter creare i propri schemi di file di output. Si può descrivere come il file di log dovrebbe essere simile. E 'possibile aumentare le classi log4j originale.

Tutte le proprietà log4j è possibile modificare in un file log4j.properties, in modo da poter utilizzare i file diversi per diversi progetti.

la registrazione Java non è il mio favorit, ma questo potrebbe essere perché io uso log4j dall'inizio.

Il Commons Logging panoramica dà la ragione per la sua esistenza: la registrazione dal codice della libreria, quando si avere alcun controllo sul quadro di registrazione sottostante. Molto importante per i vari progetti Apache, che saranno collegati in applicazioni esterne. Forse non è così importante per i progetti IT interni, dove si ha il controllo completo.

Detto questo, scrivo a Commons registrazione, così come molti degli altri sviluppatori che conosco. Il motivo è quello di ridurre al minimo il bagaglio mentale: è possibile modificare progetti o lavori, e non dover imparare un nuovo quadro (a condizione che il nuovo lavoro / progetto utilizza anche CL, e / o li si può convincere a trasferirsi in esso)

Inoltre, v'è un certo valore per creare i propri wrapper intorno a qualunque quadro che si usa. Come descritto qui , mi piace usare un oggetto LogWrapper per fornire personalizzati in stringa (importante), e ridurre al minimo l'ingombro visivo delle dichiarazioni di registrazione (meno importante).

In generale vorrei default utilizzando Log4J.

Vorrei utilizzare Java Logging se non mi dispiace una dipendenza da Java 1.4 ma vorrei ancora usare Log4J di preferenza.

Vorrei utilizzare Commons Logging se stavo migliorando qualcosa che già usato.

Vorrei suggerire la creazione di un sottile facciata di registrazione che può scrivere qualsiasi quadri di registrazione, a questo punto la scelta del motore supporto diventare praticamente un punto controverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top