Upload
phungkhue
View
258
Download
2
Embed Size (px)
Citation preview
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);