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
FALSEpokud se chyby nemají logovat, neboNULL, 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\Environment 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.



