Click here to load reader
View
231
Download
2
Embed Size (px)
Marko Miloevi
Logovanje informacija
Kreiranje poruka o tome ta program
radi.
Neto kao
main(String[] args) {
System. .println("Aplikacija pokrenuta.");
System. .println("Pozdrav!");
System. .println("Kraj.");
}
Prave aplikacije su sloene
Najee su vieprocesne
Paralelno ih koristi veliki broj korisnika
Na jednom serveru moe biti vie
aplikacija
Svaka aplikacija moe da komunicira sa
vie pozadinskih servisa
Zato logovanje?
U velikim sistemima uvek dolazi do
greaka
Tipina poruka koja se dobije od
korisnika u sluaju greke: Ne radi
Dodatne informacije su, uglavnom,
nedovoljne
Problem se najjednostavnije reava ukoliko
su zapameni koraci koje je korisnik
izvravao
Zato logovanje?
Omoguava naknadni pregled izvrenih
akcija i greaka koje su se desile
U toku razvoja aplikacije
Pomae pri otklanjanju greaka (debugging)
U produkciji
Olakava uoavanje i otklanjanje problema
nastalih pri korienju aplikacije
Naini logovanja
Poruke mogu da se alju na razliite
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 omoguava korienje
velikog broja biblioteka za logovanje na
jedinstveni nain
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
Slue za automatsko filtriranje poruka
Proces logovanja
Logger Handler
Filter Filter Formatter
applikacija odredite
Poruka se alje Logger objektu
Logger kroz Filter odluuje 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 slui za logovanje
poruka vezanih za odreenu
komponentu aplikacije
Svaki Logger objekat ima ime
Standardno, imena se daju korienjem
imena paketa kojima klasa pripada
uva podatke o roditelju
Klasa Logger
Instanca se dobija korienjem
getLogger metoda
Vraa novi ili postojei objekat sa istim
imenom
Ima nivo logovanja koji se podeava
korienjem properties fajla java -Djava.util.logging.config.file=
ili dinamiki logger.setLevel(...)
Filter
Filter je interfejs koji trai 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
Postojei 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 dogaaje koji se deavaju posle greke
Treba logovati
Kritine dogaaje
Rezultate dugog niza operacija
Interakciju sa drugim komponentama sistema
Kompleksne akcije
Akcije za koje se zna da mogu da uzrokuju
probleme
Mogui problemi
Logovanje nepotrebnih poruka
Neodravanje (gomilanje) starih log
fajlova
Veina sistema za logovanje ima mogunost
deljenja log fajlova po nekom kriterijumu
(veliina, datum), to olakava odravanje new FileHandler("log.xml", 1000, 10);