Java-logning

I denne vejledning lærer vi om Java-logning og dens forskellige komponenter ved hjælp af eksempler.

Java giver os mulighed for at oprette og fange logbeskeder og filer gennem logningsprocessen.

I Java kræver logning rammer og API'er. Java har en indbygget logningsramme i java.util.loggingpakken.

Vi kan også bruge tredjepartsrammer som Log4j, Logback og mange flere til logningsformål.

Java-logningskomponenter

Nedenstående figur repræsenterer kernekomponenterne og strømmen af ​​kontrol af Java Logging API ( java.util.logging).

Java-logning

1. Logger

Den Loggerklasse tilvejebringer fremgangsmåder til logning. Vi kan instantiere objekter fra Loggerklassen og kalde dens metoder til logningsformål.

Lad os tage et eksempel.

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

Den getLogger()metode for Loggerklassen bruges til at finde eller oprette en ny Logger. Strengargumentet definerer navnet på loggeren.

Her opretter dette et nyt Loggerobjekt eller returnerer et eksisterende Loggermed samme navn.

Det er en konvention at definere en Loggerefter den aktuelle klasse ved hjælp af class.getName().

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

Bemærk: Denne metode kaster, NullPointerExceptionhvis det passerede navn er null.

Hver Loggerhar et niveau, der bestemmer vigtigheden af ​​logmeddelelsen. Der er 7 grundlæggende logniveauer:

Logniveau (i faldende rækkefølge) Brug
ALVORLIG alvorlig fiasko
ADVARSEL advarselsmeddelelse, et potentielt problem
INFO generel information om runtime
KONFIG konfigurationsoplysninger
BØDE generel udviklerinformation (sporing af beskeder)
FINER detaljeret udviklerinformation (sporing af beskeder)
FINEST meget detaljerede udvikleroplysninger (sporing af beskeder)
AF slå logning fra for alle niveauer (fange intet)
ALLE slå logning til på alle niveauer (fang alt)

Hvert logniveau har et heltal, der bestemmer deres sværhedsgrad bortset fra to specielle logniveauer OFFog ALL.

Logning af beskeden

Som standard er de tre øverste logniveauer altid logget. For at indstille et andet niveau kan vi bruge følgende kode:

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

I dette eksempel er kun niveau FINEog niveauer over det indstillet til at blive logget. Alle andre logmeddelelser slettes.

Nu for at logge en besked bruger vi log()metoden.

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

Der er stenografiske metoder til logning på ønskede niveauer.

 logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message"); 

Alle loganmodninger, der har bestået det indstillede logniveau, videresendes derefter til LogRecord .

Bemærk: Hvis en loggers niveau er indstillet til null, arves dets niveau fra dets overordnede og så videre op i træet.

2. Filtre

Et filter (hvis det er til stede) bestemmer, om LogRecord skal videresendes eller ej. Som navnet antyder, filtrerer det logbeskederne efter specifikke kriterier.

Et LogRecord sendes kun fra loggeren til loghåndteringen og fra loghåndteringen til eksterne systemer, hvis det overholder de angivne kriterier.

 // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); 

3. Handlere (Appenders)

Loghåndtereren eller appenderne modtager LogRecord og eksporterer den til forskellige mål.

Java SE tilbyder 5 indbyggede håndterere:

Handlere Brug
StreamHandler skriver til en OutputStream
ConsoleHandler skriver til konsol
FileHandler skriver til fil
SocketHandler skriver til eksterne TCP-porte
MemoryHandler skriver til hukommelse

En handler kan sende LogRecord til et filter for igen at afgøre, om det kan videresendes til eksterne systemer eller ej.

For at tilføje en ny handler bruger vi følgende kode:

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

For at fjerne en handler bruger vi følgende kode:

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

En logger kan have flere håndterere. For at få alle håndtererne bruger vi følgende kode:

 Handler() handlers = logger.getHandlers(); 

4. Formaterere

En handler kan også bruge en formatering til at formatere LogRecord- objektet i en streng, før det eksporteres til eksterne systemer.

Java SE har to indbyggede formateringsprogrammer :

Formaterere Brug
SimpleFormatter formaterer LogRecord til streng
XMLFormatter formaterer LogRecord til XML-formular

Vi kan bruge følgende kode til at formatere en handler:

 // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); 

LogManager

Den LogManager objekt holder styr på den globale logning oplysninger. Det læser og vedligeholder logningskonfigurationen og loggerforekomsterne.

Loghåndteringen er en singleton, hvilket betyder, at kun en forekomst af den instantieres.

For at hente loghåndteringsinstansen bruger vi følgende kode:

 LogManager manager = new LogManager(); 

Fordele ved logning

Her er nogle af fordelene ved at logge på Java.

  • hjælper med at overvåge programmets strømning
  • hjælper med at registrere eventuelle fejl, der kan opstå
  • yder support til problemdiagnose og fejlretning

Interessante artikler...