În acest tutorial, vom afla despre Java Logging și diferitele sale componente, cu ajutorul exemplelor.
Java ne permite să creăm și să captăm mesaje și fișiere jurnal prin procesul de jurnalizare.
În Java, jurnalizarea necesită cadre și API-uri. Java are un cadru de logare încorporat în java.util.logging
pachet.
Putem folosi, de asemenea, cadre terță parte, cum ar fi Log4j, Logback și multe altele în scopuri de logare.
Componente de înregistrare Java
Figura de mai jos reprezintă componentele de bază și fluxul de control al API-ului Java Logging ( java.util.logging
).

1. Logger
Logger
Clasa oferă metode pentru înregistrarea în jurnal. Putem instanționa obiecte din Logger
clasă și îi putem apela metodele în scopuri de înregistrare.
Să luăm un exemplu.
Logger logger = Logger.getLogger("newLoggerName");
getLogger()
Metoda a Logger
clasei este utilizată pentru a găsi sau de a crea un nou Logger
. Argumentul șir definește numele jurnalului.
Aici, acest lucru creează un Logger
obiect nou sau returnează un existent Logger
cu același nume.
Este o convenție de a defini o Logger
după clasa curentă folosind class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Notă: Această metodă se va arunca NullPointerException
dacă numele trecut este null
.
Fiecare Logger
are un nivel care determină importanța mesajului jurnal. Există 7 niveluri de bază ale jurnalului:
Nivel jurnal (în ordine descrescătoare) | Utilizare |
---|---|
GRAVE | eșec grav |
AVERTIZARE | mesaj de avertizare, o problemă potențială |
INFO | informații generale despre timpul de rulare |
CONFIG | informații de configurare |
AMENDA | informații generale pentru dezvoltatori (urmărirea mesajelor) |
FINER | informații detaliate pentru dezvoltatori (urmărirea mesajelor) |
CEL MAI BUN | informații foarte detaliate pentru dezvoltatori (urmărirea mesajelor) |
OPRIT | opriți înregistrarea pentru toate nivelurile (nu capturați nimic) |
TOATE | activați înregistrarea pentru toate nivelurile (capturați totul) |
Fiecare nivel de jurnal are o valoare întreagă care determină severitatea acestora, cu excepția a două niveluri de jurnal speciale OFF
și ALL
.
Înregistrarea mesajului
În mod implicit, primele trei niveluri de jurnal sunt întotdeauna jurnalizate. Pentru a seta un nivel diferit, putem folosi următorul cod:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
În acest exemplu, numai nivelul FINE
și nivelurile de deasupra acestuia sunt setate pentru a fi înregistrate. Toate celelalte mesaje din jurnal sunt abandonate.
Acum, pentru a înregistra un mesaj, folosim log()
metoda.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Există metode de scurtare pentru înregistrarea la nivelurile dorite.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Toate cererile de jurnal care au trecut nivelul de jurnal setat sunt apoi redirecționate către LogRecord .
Notă: dacă nivelul unui jurnal este setat la null
, nivelul său este moștenit de la părintele său și așa mai departe în copac.
2. Filtre
Un filtru (dacă este prezent) determină dacă LogRecord trebuie redirecționat sau nu. După cum sugerează și numele, filtrează mesajele jurnal în funcție de criterii specifice.
Un LogRecord este transmis doar de la logger la handlerul de jurnal și de la handlerul de jurnal la sistemele externe numai dacă acesta trece criteriile specificate.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Manipulatori (Anexe)
Gestionarul de jurnal sau anexele primesc LogRecord și îl exportă către diferite ținte.
Java SE oferă 5 handler-uri încorporate:
Manipulatori | Utilizare |
---|---|
StreamHandler | scrie unui OutputStream |
ConsoleHandler | scrie la consolă |
FileHandler | scrie la dosar |
SocketHandler | scrie pe porturi TCP la distanță |
MemoryHandler | scrie în memorie |
Un handler poate trece LogRecord la un filtru pentru a determina din nou dacă poate fi redirecționat către sisteme externe sau nu.
Pentru a adăuga un nou handler, folosim următorul cod:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
Pentru a elimina un handler, folosim următorul cod:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
Un logger poate avea mai multe gestionare. Pentru a obține toți gestionarii, folosim următorul cod:
Handler() handlers = logger.getHandlers();
4. Formatatori
Un handler poate utiliza, de asemenea, un Formatter pentru a formata obiectul LogRecord într-un șir înainte de a-l exporta în sisteme externe.
Java SE are două formate încorporate :
Formatatori | Utilizare |
---|---|
SimpleFormatter | formatează LogRecord în șir |
XMLFormatter | formate LogRecord pentru a forma XML |
Putem folosi următorul cod pentru a formata un handler:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
Obiectul LogManager ține evidența informațiilor de înregistrare la nivel global. Citește și menține configurația de înregistrare și instanțele de înregistrare.
Managerul de jurnal este un singleton, ceea ce înseamnă că este instanțiată o singură instanță a acestuia.
Pentru a obține instanța managerului de jurnal, folosim următorul cod:
LogManager manager = new LogManager();
Avantajele înregistrării
Iată câteva dintre avantajele conectării în Java.
- ajută la monitorizarea fluxului programului
- ajută la captarea oricăror erori care pot apărea
- oferă suport pentru diagnosticarea și depanarea problemelor