Spravne nastavené logování je rozdíl mezi hodinovým debugovanim a petuminutovou diagnostikou. Spatne logování je buď příliš (tisíce radku za sekundu, které nikdo nečte) nebo příliš málo (CHYBA — nic víc).
SLF4J jako fasáda¶
SLF4J (Simple Logging Facade for Java) odstiňuje vas kod od konkrétní logovací implementace. V produkci používáte Log4j, na test Logback — kod se nemění. Vždy logujte pres SLF4J, nikdy primo pres Log4j API.
Log levely — pravidla¶
ERROR: něco selhalo a vyzaduje zásah (databaze nedostupná, externi služba neodpovídá). WARN: něco je podezrele, ale aplikace pokračuje (deprecated API, blíží se limit). INFO: vyznamne business udalosti (uživatel se přihlásil, objednávka vytvořena). DEBUG: detaily pro vyvojare (SQL dotazy, HTTP hlavičky). Na produkci INFO a výše, na dev DEBUG.
MDC — Mapped Diagnostic Context¶
Kazdy log řádek by měl obsahovat: čas, thread, level, logger, message — a taky uživatelské jmeno, session ID, request ID. MDC to řeší: na začátku requestu vložíte userId do MDC, kazdy log řádek ho automaticky obsahuje. Neocenitelne pri hledání problemu konkrétního uzivatele.
Rotace a retence¶
DailyRollingFileAppender: nový soubor kazdy den. Retence 30 dní. Maximální velikost 100 MB per soubor (RollingFileAppender). Komprese starých logu (gzip). Na produkci NIKDY logujte do stdout — použijte FileAppender.
Centralni sber¶
S 20 servery je čtení logu na kazdem serveru zvlášť nepraktické. Rsyslog/syslog-ng pro centralni sber na log server. Hledáme řešení pro full-text search v lozích — zatím grep, ale neska’luje.
Pravidla¶
- SLF4J fasáda. 2. Spravne log levely. 3. MDC pro kontext. 4. Rotace a retence. 5. Logujte co, ne jak (výsledek operace, ne kazdy řádek kodu).
Potřebujete pomoc s implementací?
Naši experti vám pomohou s návrhem, implementací i provozem. Od architektury po produkci.
Kontaktujte nás