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

1. Logger
Den Logger
klasse tilvejebringer fremgangsmåder til logning. Vi kan instantiere objekter fra Logger
klassen og kalde dens metoder til logningsformål.
Lad os tage et eksempel.
Logger logger = Logger.getLogger("newLoggerName");
Den getLogger()
metode for Logger
klassen bruges til at finde eller oprette en ny Logger
. Strengargumentet definerer navnet på loggeren.
Her opretter dette et nyt Logger
objekt eller returnerer et eksisterende Logger
med samme navn.
Det er en konvention at definere en Logger
efter den aktuelle klasse ved hjælp af class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Bemærk: Denne metode kaster, NullPointerException
hvis det passerede navn er null
.
Hver Logger
har 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 OFF
og 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 FINE
og 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