I denne opplæringen vil vi lære om Java Logging og dens forskjellige komponenter ved hjelp av eksempler.
Java lar oss opprette og fange loggmeldinger og filer gjennom loggingen.
I Java krever logging rammer og API-er. Java har et innebygd loggerammeverk i java.util.logging
pakken.
Vi kan også bruke tredjepartsrammer som Log4j, Logback og mange flere til loggformål.
Java Logging Components
Figuren nedenfor representerer kjernekomponentene og kontrollflyten til Java Logging API ( java.util.logging
).

1. Logger
Den Logger
klasse bringer fremgangsmåter for logging. Vi kan instantiere objekter fra Logger
klassen og kalle metodene for det.
La oss ta et eksempel.
Logger logger = Logger.getLogger("newLoggerName");
Den getLogger()
metoden i Logger
klassen brukes til å finne eller lage en ny Logger
. Strengargumentet definerer navnet på loggeren.
Her skaper dette et nytt Logger
objekt eller returnerer et eksisterende Logger
med samme navn.
Det er en konvensjon å definere en Logger
etter gjeldende klasse ved hjelp av class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Merk: Denne metoden vil kaste NullPointerException
hvis det passerte navnet er null
.
Hver Logger
har et nivå som bestemmer viktigheten av loggmeldingen. Det er 7 grunnleggende loggnivåer:
Loggnivå (i synkende rekkefølge) | Bruk |
---|---|
ALVORLIG | alvorlig svikt |
ADVARSEL | advarsel, et potensielt problem |
INFO | generell kjøretidinformasjon |
KONFIG | konfigurasjonsinformasjon |
FINT | generell utviklerinformasjon (sporing av meldinger) |
FINER | detaljert utviklerinformasjon (sporing av meldinger) |
FINESTE | svært detaljert informasjon om utvikler (sporing av meldinger) |
AV | slå av logging for alle nivåer (fange ingenting) |
ALLE | slå på logging for alle nivåer (fange opp alt) |
Hvert loggnivå har et heltall som bestemmer alvorlighetsgraden bortsett fra to spesielle loggnivåer OFF
og ALL
.
Logger meldingen
Som standard logges alltid de tre øverste loggnivåene. For å sette et annet nivå kan vi bruke følgende kode:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
I dette eksemplet er bare nivå FINE
og nivåer over det satt til å logges. Alle andre loggmeldinger slettes.
Nå for å logge en melding bruker vi log()
metoden.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Det er stenografiske metoder for å logge på ønsket nivå.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Alle loggforespørsler som har bestått det angitte loggnivået, blir deretter videresendt til LogRecord .
Merk: Hvis en loggers nivå er satt til null
, arves nivået fra foreldrene og så videre oppover treet.
2. Filtre
Et filter (hvis det er tilstede) avgjør om LogRecord skal videresendes eller ikke. Som navnet antyder, filtrerer den loggmeldingene etter spesifikke kriterier.
Et LogRecord sendes bare fra loggeren til loggbehandleren og fra loggbehandleren til eksterne systemer hvis det oppfyller de angitte kriteriene.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Handlers (Appenders)
Loggbehandleren eller appenderne mottar LogRecord og eksporterer den til forskjellige mål.
Java SE tilbyr 5 innebygde håndterere:
Handlere | Bruk |
---|---|
StreamHandler | skriver til en OutputStream |
ConsoleHandler | skriver til konsoll |
FileHandler | skriver til fil |
SocketHandler | skriver til eksterne TCP-porter |
MemoryHandler | skriver til minne |
En behandler kan overføre LogRecord til et filter for å avgjøre om det kan videresendes til eksterne systemer eller ikke.
For å legge til en ny behandler bruker vi følgende kode:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
For å fjerne en behandler bruker vi følgende kode:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
En logger kan ha flere håndterere. For å få alle håndtererne bruker vi følgende kode:
Handler() handlers = logger.getHandlers();
4. Formaterere
En behandler kan også bruke en formatering til å formatere LogRecord- objektet i en streng før den eksporteres til eksterne systemer.
Java SE har to innebygde formaterere :
Formaterere | Bruk |
---|---|
SimpleFormatter | formaterer LogRecord til streng |
XMLFormatter | formater LogRecord til XML-skjema |
Vi kan bruke følgende kode for å formatere en behandler:
// 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 logging informasjon. Den leser og vedlikeholder loggkonfigurasjonen og loggerforekomstene.
Loggbehandleren er en singleton, noe som betyr at bare en forekomst av den blir instantiert.
For å få loggbehandlerinstansen bruker vi følgende kode:
LogManager manager = new LogManager();
Fordeler med logging
Her er noen av fordelene med å logge på Java.
- hjelper med å overvåke flyten av programmet
- hjelper med å fange opp eventuelle feil som kan oppstå
- gir støtte for problemdiagnose og feilsøking