English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
La figura sottostante mostra i componenti chiave dell'API di Logging Java (java.util.logging) e il flusso specifico.
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 |
---|---|
SEVERE | Guasti gravi |
WARNING | Messaggi di avviso, problemi potenziali |
INFO | Informazioni di runtime regolari |
CONFIG | Informazioni 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.
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:
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();
Il gestore dei log o l'applicazione aggiuntiva riceveràLogRecorde esportato verso vari obiettivi.
Java SE fornisce 5 gestori integrati:
Gestore | Usare |
---|---|
StreamHandler | su OutputStream |
ConsoleHandler | sul console |
FileHandler | in un file |
SocketHandler | su una porta TCP remota |
MemoryHandler | in 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();
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:
Formattatore | Usare |
---|---|
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());
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();
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