English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

教程基础Java

Java Flow Control

Java Arrays

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

Gestione delle eccezioni Java

Java List

Java Queue (queue)

Java Map collections

Java Set collections

Java Input/Output (I/O)

Java Reader/Writer

Other Java topics

Logging Java

In this tutorial, we will learn Java logging and its various components through examples.

Java allows us to create and capture log messages and files through the logging process.

In Java, logging requires frameworks and APIs. Java has an integrated logging framework in the java.util.logging package.

Possiamo anche utilizzare framework di terze parti (come Log4j, Logback, ecc.) per la registrazione dei log.

Componenti di log Java

La figura sottostante mostra i componenti chiave dell'API di Logging Java (java.util.logging) e il flusso specifico.

Diagramma di flusso di Java Logging

1.Logger

La classe Logger fornisce metodi di registrazione dei log. Possiamo istanziare un oggetto dalla classe Logger e chiamare i suoi metodi per registrare.

Facciamo un esempio.

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

Il metodo getLogger() della classe Logger viene utilizzato per trovare o creare un nuovo Logger. Il parametro stringa definisce il nome del logger.

Qui, questo creerà un nuovo oggetto Logger o restituirà un Logger con lo stesso nome.

Secondo la convenzione, utilizzare class.getName() per definire un Logger dopo la classe corrente.

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

.Se viene passato un nome null, il metodo solleva una NullPointerException.

Ogni Logger ha un livello che determina l'importanza dei messaggi di log. Ci sono 7 livelli di base:

Livelli di log (in ordine decrescente)Usare
SEVEREGuasti gravi
WARNING

Messaggi di avviso, problemi potenziali

INFOInformazioni di runtime regolari
CONFIGInformazioni di configurazione
FINE

Informazioni ordinarie per sviluppatori (messaggi di tracciamento)

FINER

Informazioni dettagliate per sviluppatori (messaggi di tracciamento)

FINEST

Informazioni dettagliate per sviluppatori (messaggi di tracciamento)

OFF

Chiudere la registrazione di tutti i livelli (non catturare alcun contenuto)

ALL

Aprire la registrazione di tutti i livelli (catturare tutto il contenuto)

Ogni livello di log ha un valore numerico che determina la loro gravità, eccetto i due livelli speciali OFF e ALL.

Messaggio di log

Per impostazione predefinita, vengono sempre registrati i primi tre livelli di log. Per impostare altri livelli, possiamo utilizzare il seguente codice:

logger.setLevel(Level.LogLevel);
// Esempio
logger.setLevel(Level.FINE);

In questo esempio, solo i livelli Level.FINE e superiori sono impostati per la registrazione dei log. Eliminare tutti gli altri messaggi di log.

Ora dobbiamo registrare un messaggio di log, utilizziamo il metodo log().

logger.log(Level.LogLevel, "log message");
// Esempio
logger.log(Level.INFO, "This is INFO log level message");

logger.log(Level.INFO, "Questo è un messaggio di log a livello INFO");

Ci sono alcuni metodi abbreviati per registrare i livelli richiesti.
logger.info("Questo è un messaggio di log a livello INFO");

logger.warning("Questo è un messaggio di log a livello WARNING");LogRecordPoi, tutte le richieste di log superate dal livello di log impostato vengono inoltrate a

.Attenzione:

Se il livello di un registratore è impostato su null, allora il livello verrà ereditato dal suo padre, e così via.

2. Filtro (Filter)

Il filtro (se esistente) decide se inoltrare il LogRecord. Come suggerisce il nome, filtra i messaggi di log secondo standard specifici.LogRecordSe

Se il filtro specificato è soddisfatto, allora viene trasmesso solo dal registratore al gestore dei log e dal gestore dei log al sistema esterno.
// Impostare filter
// Ottenere filter
Filter filter = logger.getFilter();

3. Gestore (Sorgente di output)

Il gestore dei log o l'applicazione aggiuntiva riceveràLogRecorde esportato verso vari obiettivi.

Java SE fornisce 5 gestori integrati:

GestoreUsare
StreamHandler

su OutputStream

ConsoleHandlersul console
FileHandlerin un file
SocketHandler

su una porta TCP remota

MemoryHandlerin memoria

Il gestore può scrivereLogRecordPassato al filtro per determinare di nuovo se può essere inoltrato verso il sistema esterno.

Per aggiungere un nuovo gestore, utilizziamo il seguente codice:

logger.addHandler(handler);
// Esempio
Handler handler = new ConsoleHandler();
logger.addHandler(handler);

Per rimuovere il gestore, utilizziamo il seguente codice:

logger.removeHandler(handler);
// Esempio
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
logger.removeHandler(handler);

Un registratore può avere più gestori. Per ottenere tutti i gestori, utilizziamo il seguente codice:

Handler[] handlers = logger.getHandlers();

4. Formattatore (Formatter)

Un registratore può avere più gestori. Per ottenere tutti i gestori, utilizziamo il seguente codice:FormatoreIl gestore può anche utilizzareLogRecordOggettoFormattazioneper stringa, quindi esportato verso sistemi esterni.

Java SE ha due formatore integratiFormatore:

FormattatoreUsare
SimpleFormatter

Formattazione del LogRecord in formato stringa

XMLFormatter

Formattazione del LogRecord in formato XML

Possiamo utilizzare il seguente codice per formattare il gestore:

// Formattazione in formato stringa
handler.setFormatter(new SimpleFormatter());
// Formattazione in formato XML
handler.setFormatter(new XMLFormatter());

Gestore dei log

Gestione dei logRegistrazione globale delle informazioni di tracciamento degli oggetti. Legge e mantiene la configurazione dei log e le istanze dei registratori.

Il gestore di log è un singleton, il che significa che è stato istanziato solo un'istanza.

Per ottenere l'istanza del gestore di log, utilizziamo il seguente codice:

LogManager manager = new LogManager();

Vantaggi dei log

Ecco alcuni vantaggi dell'uso dei log Java.

  • Aiuta a monitorare il flusso del programma

  • Aiuta a catturare eventuali errori che potrebbero verificarsi

  • Fornisce supporto per la diagnostica e il debug dei problemi