objektno-orijentisano programiranje iiinasport.pmf.ni.ac.rs/materijali/2811/l01 - logovanje.pdf ·...

Post on 05-Feb-2018

259 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Marko Milošević

Logovanje informacija

Kreiranje poruka o tome šta program

radi.

Nešto kao

main(String[] args) {

System. .println("Aplikacija pokrenuta.");

System. .println("Pozdrav!");

System. .println("Kraj.");

}

Prave aplikacije su složene

Najčešće su višeprocesne

Paralelno ih koristi veliki broj korisnika

Na jednom serveru može biti više

aplikacija

Svaka aplikacija može da komunicira sa

više pozadinskih servisa

Zašto logovanje?

U velikim sistemima uvek dolazi do

grešaka

Tipična poruka koja se dobije od

korisnika u slučaju greške: „Ne radi“

Dodatne informacije su, uglavnom,

nedovoljne

Problem se najjednostavnije rešava ukoliko

su zapamćeni koraci koje je korisnik

izvršavao

Zašto logovanje?

Omogućava naknadni pregled izvršenih

akcija i grešaka koje su se desile

U toku razvoja aplikacije

Pomaže pri otklanjanju grešaka (debugging)

U produkciji

Olakšava uočavanje i otklanjanje problema

nastalih pri korišćenju aplikacije

Načini logovanja

Poruke mogu da se šalju na različite

destinacije

Konzola

Fajl

Baza podataka

Udaljeni server

...

Java biblioteke

Postoji veliki broj biblioteka koje se

mogu korisiti

java.util.logging – standardna

biblioteka koja dolazi uz Javu

Log4j – jedna od najpopularnijih

Slf4j – fasada koja omogućava korišćenje

velikog broja biblioteka za logovanje na

jedinstveni način

Primer (java.util.logging)

java.util.logging.Level;

java.util.logging.Logger;

BasicLogging {

Logger logger =

Logger.getLogger("BasicLogger");

main(String[] args) {

logger.log(Level. , "Aplikacija pokrenuta.");

logger.log(Level. , "Pozdrav!");

logger.log(Level. , "Kraj.");

}

}

Primer (java.util.logging)

java.util.logging.Level;

java.util.logging.Logger;

BasicLogging {

Logger logger =

Logger.getLogger("BasicLogger");

main(String[] args) {

logger.info("Aplikacija pokrenuta.");

logger.severe("Pozdrav!");

logger.info("Kraj.");

}

}

Nivoi logovanja

Služe za automatsko filtriranje poruka

Proces logovanja

Logger Handler

Filter Filter Formatter

applikacija odredište

Poruka se šalje Logger objektu

Logger kroz Filter odlučuje da li da odbije poruku

Loger šalje poruku Handler objektu

Handler proverava da li da odbije poruku

Handler poziva Formatter da odredi kakav će tekst da kreira

Handler šalje poruku na destinaciju

Klasa Logger

Instanca Logger klase služi za logovanje

poruka vezanih za određenu

komponentu aplikacije

Svaki Logger objekat ima ime

Standardno, imena se daju korišćenjem

imena paketa kojima klasa pripada

Čuva podatke o roditelju

Klasa Logger

Instanca se dobija korišćenjem

getLogger metoda

Vraća novi ili postojeći objekat sa istim

imenom

Ima nivo logovanja koji se podešava

korišćenjem properties fajla ○ java -Djava.util.logging.config.file=<file>

ili dinamički ○ logger.setLevel(...)

Filter

Filter je interfejs koji traži implementaciju

metoda isLoggable(LogRecord record)

Logger ima metod setFilter()

logger.setFilter(new Filter() {

@Override

public boolean isLoggable(LogRecord record) {

return record.getMessage().contains("Aplikacija");

}

});

Handler i Formatter

Postojeći Handler – i

StreamHandler: šalje poruke OutputStream objektu

ConsoleHandler: šalje poruke na System.err (ovo je podrazumevani Handler)

FileHandler: šalje poruke u fajl

SocketHandler: šalje poruke na TCP port

Formatter – i

SimpleFormatter (podrazumevan)

XmlFormatter

Šta logovati

Ne treba logovati

Sve!

Samo događaje koji se dešavaju posle greške

Treba logovati

Kritične događaje

Rezultate dugog niza operacija

Interakciju sa drugim komponentama sistema

Kompleksne akcije

Akcije za koje se zna da mogu da uzrokuju

probleme

Mogući problemi

Logovanje nepotrebnih poruka

Neodržavanje (gomilanje) starih log

fajlova

Većina sistema za logovanje ima mogućnost

deljenja log fajlova po nekom kriterijumu

(veličina, datum), što olakšava održavanje new FileHandler("log.xml", 1000, 10);

top related