Framework di registrazione Java - Java logging framework
Un framework di registrazione Java è un pacchetto di registrazione dei dati del computer per la piattaforma Java . Questo articolo tratta i framework di registrazione per scopi generali.
La registrazione si riferisce alla registrazione dell'attività da parte di un'applicazione ed è un problema comune per i team di sviluppo. I framework di registrazione semplificano e standardizzano il processo di registrazione per la piattaforma Java. In particolare forniscono flessibilità evitando l'output esplicito alla console (vedere Appender di seguito). Il punto in cui vengono scritti i log diventa indipendente dal codice e può essere personalizzato in fase di esecuzione.
Sfortunatamente il JDK non includeva la registrazione nella sua versione originale, quindi quando è stata aggiunta l'API di registrazione Java molti altri framework di registrazione erano diventati ampiamente utilizzati, in particolare Apache Commons Logging (noto anche come Java Commons Logging o JCL) e log4j . Ciò ha portato a problemi durante l'integrazione di diverse librerie di terze parti (JAR), ciascuna utilizzando diversi framework di registrazione. I framework di registrazione collegabili (wrapper) sono stati sviluppati per risolvere questo problema.
Panoramica delle funzionalità
La registrazione è in genere suddivisa in tre parti principali: il Logger, il Formatter e l'Appender (o Handler).
- Il Logger è responsabile dell'acquisizione del messaggio da registrare insieme a determinati metadati e del suo passaggio al framework di registrazione.
- Dopo aver ricevuto il messaggio, il framework chiama il Formatter con il messaggio che lo formatta per l'output.
- Il framework quindi passa il messaggio formattato all'appender / gestore appropriato per la disposizione. Ciò potrebbe includere l'output su un display della console, la scrittura su disco, l'aggiunta a un database o la generazione di un messaggio di posta elettronica.
Framework di registrazione più semplici, come Logging Framework di Object Guy , combinano logger e appender. Ciò semplifica le operazioni predefinite, ma è meno configurabile, soprattutto se il progetto viene spostato tra ambienti.
Logger
Un logger è un oggetto che consente all'applicazione di registrarsi indipendentemente da dove viene inviato / archiviato l'output. L'applicazione registra un messaggio passando un oggetto o un oggetto e un'eccezione con un livello di gravità opzionale all'oggetto logger con un determinato nome / identificatore.
Nome
Un logger ha un nome. Il nome è generalmente strutturato gerarchicamente, con punti (.) Che separano i livelli. Uno schema comune consiste nell'utilizzare il nome della classe o del pacchetto che esegue la registrazione. Sia log4j che l' API di registrazione Java supportano la definizione di gestori più in alto nella gerarchia.
Ad esempio, il logger potrebbe essere denominato " com.sun.some.UsefulClass ". Il gestore può essere definito per uno dei seguenti:
comcom.suncom.sun.somecom.sun.some.UsefulClass
Finché c'è un gestore definito da qualche parte in questo stack, può verificarsi la registrazione. Ad esempio, un messaggio registrato nel com.sun.some.UsefulClass logger può essere scritto dal com.sun gestore. Tipicamente esiste un gestore globale che riceve ed elabora i messaggi generati da qualsiasi logger.
Livello di gravità
Il messaggio viene registrato a un certo livello. I nomi di livello comune vengono copiati da Apache Commons Logging (sebbene l'API di registrazione Java definisca nomi di livello diversi):
| Livello | Descrizione |
|---|---|
| FATALE | Gravi errori che causano la chiusura anticipata. Aspettatevi che siano immediatamente visibili su una console di stato. |
| ERRORE | Altri errori di runtime o condizioni impreviste. Aspettatevi che siano immediatamente visibili su una console di stato. |
| AVVERTIMENTO | Utilizzo di API deprecate, scarso utilizzo di API, errori "quasi", altre situazioni di runtime indesiderabili o impreviste, ma non necessariamente "sbagliate". Aspettatevi che siano immediatamente visibili su una console di stato. |
| INFORMAZIONI | Eventi di runtime interessanti (avvio / arresto). Aspettatevi che siano immediatamente visibili su una console, quindi siate prudenti e manteneteli al minimo. |
| DEBUG | informazioni dettagliate sul flusso attraverso il sistema. Aspettatevi che vengano scritti solo nei log. |
| TRACCIA | informazioni più dettagliate. Aspettatevi che vengano scritti solo nei log. |
Il framework di registrazione mantiene il livello di registrazione corrente per ogni logger. Il livello di registrazione può essere impostato in modo più o meno restrittivo. Ad esempio, se il livello di registrazione è impostato su "AVVISO", vengono registrati tutti i messaggi di quel livello o superiore: ERRORE e FATALE.
I livelli di gravità possono essere assegnati sia ai logger che agli allegati. Entrambi devono essere abilitati per un determinato livello di gravità per generare l'output. Quindi un logger abilitato per l'output di debug non genererà output se il gestore che riceve il messaggio non è abilitato anche per il debug.
Filtri
I filtri fanno sì che un evento di registro venga ignorato o registrato. Il filtro più comunemente utilizzato è il livello di registrazione documentato nella sezione precedente. Framework di registrazione come Log4j 2 e SLF4J forniscono anche marcatori che, se associati a un evento di registro, possono essere utilizzati anche per il filtraggio. I filtri possono essere utilizzati anche per accettare o negare gli eventi di log in base alle eccezioni generate, ai dati all'interno del messaggio di log, ai dati in un ThreadLocal esposto tramite l'API di registrazione o a una varietà di altri metodi.
Formattatori, layout o renderer
Un Formatter è un oggetto che formatta un determinato oggetto. Principalmente questo consiste nel prendere l'oggetto binario e convertirlo in una rappresentazione di stringa. Ogni framework definisce un formato di output predefinito che può essere sovrascritto se lo si desidera.
Appendici o gestori
Gli allegati ascoltano i messaggi pari o superiori a un livello di gravità minimo specificato. L'Appender prende il messaggio che è passato e lo pubblica in modo appropriato. Le disposizioni dei messaggi includono:
- visualizzare sulla console
- scrivere su un file o syslog
- aggiungere a una tabella di database
- distribuire tramite Java Messaging Services
- inviare tramite e-mail
- scrivere su un socket
- scarta nel "bit-bucket" (/ dev / null)
Confronto delle caratteristiche
| Struttura | genere | Livelli di registro supportati | Appendici standard | Commenti | Costo / licenza |
|---|---|---|---|---|---|
| Log4J | Framework di registrazione |
FATAL ERROR WARN INFO DEBUG TRACE
|
Troppi da elencare: vedere la documentazione di Appender | Ampiamente utilizzato in molti progetti e piattaforme. Log4j 1 è stato dichiarato "End of Life" nel 2015 ed è stato sostituito con Log4j 2 che fornisce un'API che può essere utilizzata con altre implementazioni di registrazione e un'implementazione di tale API. |
Licenza Apache, versione 2.0
|
| API di registrazione Java | Framework di registrazione |
SEVERE WARNING INFO CONFIG FINE FINER FINEST
|
La Java Virtual Machine (JVM) predefinita di Sun include: ConsoleHandler, FileHandler, SocketHandler, MemoryHandler | Viene fornito con JRE | |
| tinylog | Framework di registrazione |
ERROR WARNING INFO DEBUG TRACE
|
ConsoleWriter, FileWriter, LogcatWriter, JdbcWriter, RollingFileWriter, SharedFileWriter e null (elimina tutte le voci di registro) | Licenza Apache, versione 2.0 | |
| Logback | Framework di registrazione |
ERROR WARN INFO DEBUG TRACE
|
Troppi da elencare: vedere Appender JavaDoc | Sviluppato in sostituzione di log4j, con molti miglioramenti. Utilizzato da numerosi progetti, tipicamente dietro slf4j, ad esempio Akka , Apache Camel , Apache Cocoon , Artifactory , Gradle , Lift Framework , Play Framework , Scalatra , SonarQube , Spring Boot , ... | LGPL , versione 2.1 |
| Apache Commons Logging (JCL) | Wrapper di registrazione |
FATAL ERROR WARN INFO DEBUG TRACE
|
Dipende dal framework sottostante | Ampiamente usato, spesso in combinazione con log4j | Licenza Apache, versione 2.0 |
| SLF4J | Wrapper di registrazione |
ERROR WARN INFO DEBUG TRACE
|
Dipende dal framework sottostante, che è collegabile. Fornisce shim compatibili con API per pacchetti di registrazione JCL, JDK e log4j. Può anche usarne uno qualsiasi per generare output. Di default utilizza Logback per l'output, se disponibile. | Ampiamente utilizzato in molti progetti e piattaforme, spesso con Logback come implementazione. | Licenza MIT |
Considerazioni
JCL e Log4j sono molto comuni semplicemente perché esistono da così tanto tempo e sono state le uniche scelte per molto tempo. La flessibilità di slf4j (usando Logback sotto) lo ha reso una scelta popolare.
SLF4J è un insieme di wrapper di registrazione (o shim) che gli consentono di imitare qualsiasi altro framework. Pertanto più librerie di terze parti possono essere incorporate in un'applicazione, indipendentemente dal framework di registrazione che ciascuna ha scelto di utilizzare. Tuttavia, tutto l'output di registrazione viene generato in modo standard, in genere tramite Logback.
Log4j 2 fornisce sia un'API che un'implementazione. L'API può essere instradata ad altre implementazioni di registrazione equivalenti a come funziona SLF4J. A differenza di SLF4J, l'API Log4j 2 registra gli oggetti Message invece delle stringhe per una maggiore flessibilità e supporta anche le espressioni Java Lambda.
JCL non è realmente un framework di registrazione, ma un wrapper per uno. In quanto tale, richiede un framework di registrazione sottostante, sebbene possa utilizzare il proprio SimpleLog logger per impostazione predefinita .
JCL, SLF4J e l'API Log4j 2 sono utili quando si sviluppano librerie riutilizzabili che necessitano di scrittura su qualsiasi sistema di registrazione sottostante utilizzato dall'applicazione. Ciò fornisce anche flessibilità in ambienti eterogenei in cui è probabile che il framework di registrazione cambi, sebbene nella maggior parte dei casi, una volta scelto un framework di registrazione, non sia necessario cambiarlo durante la vita del progetto. SLF4J e Log4j 2 traggono vantaggio dall'essere più recenti e si basano sulle lezioni apprese dai framework meno recenti. Inoltre, JCL ha problemi noti con i caricatori di classi nel determinare quale libreria di registrazione dovrebbe includere e che ora ha sostituito JCL.
L'API di registrazione Java viene fornita con Java. Sebbene l'API sia tecnicamente separata dall'implementazione predefinita fornita con Java, sostituirla con un'implementazione alternativa può essere difficile, quindi molti sviluppatori confondono questa implementazione con l'API di registrazione Java. La configurazione avviene solo tramite file esterni che non sono facilmente modificabili al volo (altri framework supportano la configurazione programmatica). L'implementazione predefinita fornisce solo pochi gestori e formattatori, il che significa che la maggior parte degli utenti dovrà scriverne uno proprio.
Guarda anche
- SLF4J
- log4j
- logback
- Javolution LogContext basato sulla programmazione contestuale (framework di registrazione effettivo selezionabile in fase di esecuzione).
- Intelligenza di runtime
Riferimenti
link esterno
- API di registrazione Java 6.0
- Commons Logging
- Protomateria
- Strumenti di registrazione open source in Java
- La licenza Apache 2.0.
- Logback - Un successore del popolare progetto log4j
- tinylog - Utilità di registrazione minimalista con un logger statico
- Loggifier Uno strumento che inserisce il codice di registrazione nei file .class, .jar e .ear
- JLV - Visualizzatore di log Java attualmente disponibile come plug-in per Eclipse IDE
- Perf4j
- SLF4J
- Log4j 2