Skip to content

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:

  • TimestampY-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_APPEND flag – 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() nebo Logger::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_EX flagu (vhodný pro paralelní procesy)
  • Nemíchej úrovně – error() je pro chyby, ne pro informace, které se vejdou pod info()