In questo tutorial impareremo a conoscere Java Logging e i suoi vari componenti con l'aiuto di esempi.
Java ci consente di creare e acquisire messaggi e file di registro attraverso il processo di registrazione.
In Java, la registrazione richiede framework e API. Java ha un framework di registrazione integrato nel java.util.logging
pacchetto.
Possiamo anche utilizzare framework di terze parti come Log4j, Logback e molti altri per scopi di registrazione.
Componenti di registrazione Java
La figura seguente rappresenta i componenti principali e il flusso di controllo dell'API di registrazione Java ( java.util.logging
).

1. Registratore
La Logger
classe fornisce metodi per la registrazione. Possiamo istanziare oggetti dalla Logger
classe e chiamare i suoi metodi per scopi di registrazione.
Facciamo un esempio.
Logger logger = Logger.getLogger("newLoggerName");
Il getLogger()
metodo della Logger
classe viene utilizzato per trovare o creare un nuovo file Logger
. L'argomento stringa definisce il nome del logger.
Qui, questo crea un nuovo Logger
oggetto o ne restituisce uno esistente Logger
con lo stesso nome.
È una convenzione definire a Logger
dopo la classe corrente utilizzando class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Nota: questo metodo verrà generato NullPointerException
se il nome passato è null
.
Ognuno Logger
ha un livello che determina l'importanza del messaggio di registro. Sono disponibili 7 livelli di registro di base:
Livello di registrazione (in ordine decrescente) | Uso |
---|---|
ACUTO | grave fallimento |
AVVERTIMENTO | messaggio di avviso, un potenziale problema |
INFORMAZIONI | informazioni generali sul runtime |
CONFIG | informazioni di configurazione |
FINE | informazioni generali per sviluppatori (messaggi di tracciamento) |
FINER | informazioni dettagliate per sviluppatori (messaggi di tracciamento) |
MIGLIORE | informazioni sviluppatore molto dettagliate (messaggi di tracciamento) |
OFF | disattivare la registrazione per tutti i livelli (non acquisire nulla) |
TUTTI | attiva la registrazione per tutti i livelli (cattura tutto) |
Ogni livello di log ha un valore intero che ne determina la gravità ad eccezione di due livelli di log speciali OFF
e ALL
.
Registrazione del messaggio
Per impostazione predefinita, i primi tre livelli di registro vengono sempre registrati. Per impostare un livello diverso, possiamo utilizzare il seguente codice:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
In questo esempio, solo il livello FINE
e i livelli superiori sono impostati per essere registrati. Tutti gli altri messaggi di registro vengono eliminati.
Ora per registrare un messaggio, usiamo il log()
metodo.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Esistono metodi abbreviati per la registrazione ai livelli desiderati.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Tutte le richieste di log che hanno superato il livello di log impostato vengono quindi inoltrate a LogRecord .
Nota: se il livello di un logger è impostato su null
, il suo livello viene ereditato dal suo genitore e così via nella struttura ad albero.
2. Filtri
Un filtro (se presente) determina se il LogRecord deve essere inoltrato o meno. Come suggerisce il nome, filtra i messaggi di registro in base a criteri specifici.
Un LogRecord viene passato dal logger al gestore del log e dal gestore del log ai sistemi esterni solo se soddisfa i criteri specificati.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Gestori (appendici)
Il gestore di log o gli allegati ricevono il LogRecord e lo esporta in varie destinazioni.
Java SE fornisce 5 gestori integrati:
Gestori | Uso |
---|---|
StreamHandler | scrive a un OutputStream |
ConsoleHandler | scrive su console |
FileHandler | scrive su file |
SocketHandler | scrive su porte TCP remote |
MemoryHandler | scrive in memoria |
Un gestore può passare il LogRecord a un filtro per determinare nuovamente se può essere inoltrato a sistemi esterni o meno.
Per aggiungere un nuovo gestore, usiamo il seguente codice:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Per rimuovere un gestore, usiamo il seguente codice:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Un logger può avere più gestori. Per ottenere tutti i gestori, usiamo il seguente codice:
Handler() handlers = logger.getHandlers();
4. Formattatori
Un gestore può anche utilizzare un Formatter per formattare l' oggetto LogRecord in una stringa prima di esportarlo su sistemi esterni.
Java SE ha due formattatori integrati :
Formattatori | Uso |
---|---|
SimpleFormatter | formatta LogRecord in stringa |
XMLFormatter | formatta LogRecord in formato XML |
Possiamo usare il seguente codice per formattare un gestore:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
L' oggetto LogManager tiene traccia delle informazioni di registrazione globali. Legge e mantiene la configurazione del logging e le istanze del logger.
Il log manager è un singleton, il che significa che viene istanziata solo un'istanza di esso.
Per ottenere l'istanza del gestore di log, utilizziamo il codice seguente:
LogManager manager = new LogManager();
Vantaggi della registrazione
Ecco alcuni dei vantaggi del login in Java.
- aiuta a monitorare il flusso del programma
- aiuta a catturare eventuali errori che possono verificarsi
- fornisce supporto per la diagnosi dei problemi e il debug