Registrazione Java

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.loggingpacchetto.

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).

Registrazione Java

1. Registratore

La Loggerclasse fornisce metodi per la registrazione. Possiamo istanziare oggetti dalla Loggerclasse e chiamare i suoi metodi per scopi di registrazione.

Facciamo un esempio.

 Logger logger = Logger.getLogger("newLoggerName"); 

Il getLogger()metodo della Loggerclasse viene utilizzato per trovare o creare un nuovo file Logger. L'argomento stringa definisce il nome del logger.

Qui, questo crea un nuovo Loggeroggetto o ne restituisce uno esistente Loggercon lo stesso nome.

È una convenzione definire a Loggerdopo la classe corrente utilizzando class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Nota: questo metodo verrà generato NullPointerExceptionse il nome passato è null.

Ognuno Loggerha 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 OFFe 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 FINEe 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

Articoli interessanti...