EN | CS | Přihlásit | Registrovat

Logování chyb

Vypisování chyb se nesmí nikdy dostat na produkční server. Laděnka je výborná společnice na pracovišti, ale nikdy ji nesmíme brát s sebou ven. Je totiž děsně ukecaná a vyzradí na vás úplně všechno (nicméně kdyby k tomu náhodou došlo, má integrovaný systém pro skrytí citlivých políček, např. hesel). Na produkčním serveru je však možné nechat výpisy ukládat do adresáře nebo odesílat administrátorovi emailem. To se zapíná takto:

Debug::enable(Debug::DETECT, '%logDir%/php_error.log', 'admin@example.com');
  • první parametr je přepínač mezi produkčním a vývojovým režimem
  • druhý parametr je jméno souboru error logu (absolutní cesta nebo FALSE pokud se chyby nemají logovat, nebo NULL, pokud se použije autodetekce, viz níže)
  • třetí parametr je emailová adresa, kam se mají posílat notifikace (nebo pole hlaviček emailu, viz níže).

Autodetekce

Laděnka tedy funguje buď v režimu zobrazování nebo logování chyb. To se přepíná prvním parametrem a hodnotou Debug::PRODUCTION nebo Debug::DEVELOPMENT. Pokud jej však neuvedeme nebo má hodnotu NULL či Debug::DETECT, detekuje se režim podle IP adresy serveru – je-li na adrese veřejné, půjde o produkční režim, je-li na lokální, tak o vývojářský režim.

V produkčním režimu Laděnka úplně ztichne a funguje jen logování do souboru. Filtrování citlivých dat je nyní bezpředmětné – v produkčním režimu (což nutně neznamená „na produkčním serveru“) se nezobrazuje nic. Pokud nejsme ve vývojovém režimu, zvolí logování do souboru %logDir%/php_error.log tudíž v Nette\Environ­ment musí být nastavena proměnná prostředí logDir nebo appDir. (nicméně Nette\Debug lze používat stále samostatně, závislost na třídě Environment je jen volitelná).

Proměnnou %logDir% je možné nastavit v config.ini např. takto:

variable.logDir = %appDir%/log

Poslední volitelný parametr metody Debug::enable() je emailová adresa nebo pole hlaviček, kam bude zasílána notifikace o vzniku chyby (včetně fatálních nezachytitelných chyb). Takto odchytávány jsou již chyby úrovně notice. V případě chyby se pošle jen jeden email, takže nehrozí zaplavení adminovy schránky – k této detekci slouží soubor {logfile}.monitor, který se vytvoří v případě úspěšného odeslání emailu s chybou. Pokud nelze soubor {logfile}.monitor vytvořit či pokud existuje, email se nepošle.

Emailové hlavičky (včetně pseudohlavičky Body) je možné specifikovat takto:

$emailHeaders = array(
'From' => 'web@example.com',
'To' => 'admin@example.com',
'Subject' => 'Chyba na serveru %host%',
'Body' => '%date% - %message%. Pro více informací shlédněte error log.',
);
Debug::enable(Debug::DETECT, 'php_error.log', $emailHeaders);

Jako %message% se doplní případná zpráva vyjímky.


Login to submit a comment