Popis Logger třídy
Tento dokument popisuje strukturu a funkcionalitu třídy Logger v core/Logger/Logger.php.
Třída Logger
Statická třída pro logování zpráv aplikace s osmi úrovněmi závažnosti (PSR-3 standard).
Principy
- Statická API – všechny metody jsou statické, Logger se používá globálně bez instanciace
- PSR-3 kompatibilita – standartní úrovně logování (emergency, alert, critical, error, warning, notice, info, debug)
- Kontextová data – podporuje volitelné kontextové informace v JSON formátu
- Přímý zápis do souboru – logy se zapisují přímo do log souboru bez cachování
Nastavení log souboru
Před zalogováním první zprávy je povinné nastavit cestu k log souboru jednou z těchto metod:
Logger::setLogFile(string $logFile): void
Nastaví celou cestu k log souboru přímo.
Logger::setLogFile('/var/log/application.log');
Logger::setLog(string $log): void
Nastaví log soubor pomocí názvu, který se převede na alias a vytvoří standardní cestu:
DIR . '/var/log/{alias}.log
Logger::setLog('my-application');
// Vytvoří: /data/www-data/_petrovoCMS/var/log/my-application.log
Klíčové metody pro logování
Všechny metody mají stejný interface: (string $message, array $context = []): void
| Metoda | Úroveň | Popis |
|---|---|---|
emergency() |
emergency | Systém je nepoužívatelný |
alert() |
alert | Musí se provést okamžitá akce (SMS upozornění, buzení) |
critical() |
critical | Kritická chyba (komponenta nedostupná, výjimka) |
error() |
error | Runtime chyby (nemusí vyžadovat okamžitou akci) |
warning() |
warning | Výjimečné situace (zastaralé API, nežádoucí behavior) |
notice() |
notice | Normální ale významné события |
info() |
info | Zajímavé události (login, SQL logy) |
debug() |
debug | Detailní ladící informace |
Struktura log záznamu
Každý log záznam obsahuje:
- Timestamp –
Y-m-d H:i:s - Úroveň – název úrovně (emergency, alert, …)
- Zpráva – textová zpráva
- Kontext (volitelný) – JSON-encoded pole s dodatečnými daty
Formát:
2024-01-15 14:23:45 [error]: Database connection failed [context]: {"connection":"mysql","attempt":3}
Kontextová data
Kontext je volitelné asociativní pole s dodatečnými informacemi. Vždy se JSON-enkoduje s flagy:
- JSON_UNESCAPED_UNICODE – Unicode znaky se neescapují
- JSON_UNESCAPED_SLASHES – lomítka se neescapují
- JSON_PARTIAL_OUTPUT_ON_ERROR – pokud encoding selže, je vráceno částečné data
Logger::error('Database error', [
'code' => 1045,
'host' => 'localhost',
'credentials' => 'invalid'
]);
Bezpečnost zápisu
- Logy se zapisují s
FILE_APPENDflag – přidávají se na konec souboru - Používá se
LOCK_EX– exkluzivní zámek pro zamezení race conditions - Cesta k log souboru musí existovat a být zapisovatelná
Chyby a výjimky
- RuntimeException – pokud log soubor není nastavený a dojde k pokusu o zapsání loga
// Vyvolá RuntimeException Logger::info('Message');
Shrnutí (pro vývojáře)
- Vždy nastav log soubor pomocí
Logger::setLog()neboLogger::setLogFile()na začátku aplikace - Loguj podle úrovně –
debug()pro vývoj,error()pro chyby,info()pro významné situace - Kontextová data ulož jako asociativní pole – budou automaticky JSON-enkodovaná
- Logger je thread-safe díky
LOCK_EXflagu (vhodný pro paralelní procesy) - Nemíchej úrovně –
error()je pro chyby, ne pro informace, které se vejdou podinfo()