17
Marko Milošević

Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

Embed Size (px)

Citation preview

Page 1: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

Marko Milošević

Page 2: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

}

Page 3: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 4: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 5: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 6: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

Načini logovanja

Poruke mogu da se šalju na različite

destinacije

Konzola

Fajl

Baza podataka

Udaljeni server

...

Page 7: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 8: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

}

}

Page 9: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

}

}

Page 10: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

Nivoi logovanja

Služe za automatsko filtriranje poruka

Page 11: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 12: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 13: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 14: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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");

}

});

Page 15: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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

Page 16: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

Š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

Page 17: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L01 - Logovanje.pdf · Java biblioteke Postoji veliki ... Objektno-orijentisano programiranje III Author:

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