Java-logging

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.loggingpakken.

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

Java-logging

1. Logger

Den Loggerklasse bringer fremgangsmåter for logging. Vi kan instantiere objekter fra Loggerklassen og kalle metodene for det.

La oss ta et eksempel.

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

Den getLogger()metoden i Loggerklassen brukes til å finne eller lage en ny Logger. Strengargumentet definerer navnet på loggeren.

Her skaper dette et nytt Loggerobjekt eller returnerer et eksisterende Loggermed samme navn.

Det er en konvensjon å definere en Loggeretter gjeldende klasse ved hjelp av class.getName().

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

Merk: Denne metoden vil kaste NullPointerExceptionhvis det passerte navnet er null.

Hver Loggerhar 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 OFFog 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å FINEog 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

Interessante artikler...