Spravne nastavene logovani je rozdil mezi hodinovym debugovanim a petuminutovou diagnostikou. Spatne logovani je bud prilis (tisice radku za sekundu, ktere nikdo necte) nebo prilis malo (CHYBA — nic vic).
SLF4J jako fasada¶
SLF4J (Simple Logging Facade for Java) odstinuje vas kod od konkretni logovaci implementace. V produkci pouzivate Log4j, na test Logback — kod se nemeni. Vzdy logujte pres SLF4J, nikdy primo pres Log4j API.
Log levely — pravidla¶
ERROR: neco selhalo a vyzaduje zasah (databaze nedostupna, externi sluzba neodpovida). WARN: neco je podezrele, ale aplikace pokracuje (deprecated API, blizi se limit). INFO: vyznamne business udalosti (uzivatel se prihlasil, objednavka vytvorena). DEBUG: detaily pro vyvojare (SQL dotazy, HTTP hlavicky). Na produkci INFO a vyse, na dev DEBUG.
MDC — Mapped Diagnostic Context¶
Kazdy log radek by mel obsahovat: cas, thread, level, logger, message — a taky uzivatelske jmeno, session ID, request ID. MDC to resi: na zacatku requestu vlozite userId do MDC, kazdy log radek ho automaticky obsahuje. Neocenitelne pri hledani problemu konkretniho uzivatele.
Rotace a retence¶
DailyRollingFileAppender: novy soubor kazdy den. Retence 30 dni. Maximalni velikost 100 MB per soubor (RollingFileAppender). Komprese starych logu (gzip). Na produkci NIKDY logujte do stdout — pouzijte FileAppender.
Centralni sber¶
S 20 servery je cteni logu na kazdem serveru zvlast neprakticke. Rsyslog/syslog-ng pro centralni sber na log server. Hledame reseni pro full-text search v lozich — zatim grep, ale neska’luje.
Pravidla¶
- SLF4J fasada. 2. Spravne log levely. 3. MDC pro kontext. 4. Rotace a retence. 5. Logujte co, ne jak (vysledek operace, ne kazdy radek kodu).