Vyvolání vlastní výjimky do logu
- kolibla
- Člen | 25
Ahoj, hezký večer,
potřebovala bych se dozvědět info kolem výjimek a předem se omlouvám, pokud otevírám téma, které je již vyřešené někde jinde.
V souboru bootstrap.php
mám klasicky:
$configurator->enableTracy(__DIR__ . '/../log', 'email@email.com');
Když dojde k určité chybě 500 – aplikační chyba, tak přijde HTML Exception do logu + e-mail (to je OK). Jak bych si tohle mohla zajistit u bloku například try-catch? Pro příklad (budu psát hodně pseudokódem):
private function custom()
{
if ($response->status !== 200)
{
throw new \Exception("Bad response state: " . $response->status);
}
}
A někde dál je volání:
try
{
$this->custom();
}
catch (\Exception $e)
{
Debugger::log($e->getMessage(), ILogger::EXCEPTION);
}
Jenže tady je kámen úrazu. Potřebovala bych pěkně vyhodit tu
HTML Exception
, která se posílá do logu (klasická červenka) +
odeslat e-mail
. Jenže nic takového se nestane a vytvoří se
pouze soubor exception.txt
– jméno souboru se nastaví podle
levelu, co se zadá do druhého parametru funkce:
log($message, string $level = ILogger::INFO)
Do souboru exception.txt
ta chybka skočí, to je
pochopitelné… Jenže – tím to končí. Možná taky něco dělám
špatně, proto se ptám vás, zkušených borců. Takže ještě jednou a
naposledy to zkusím shrnout.
Existuje nějaký vlastní jednoduchý způsob, jak si posílat ty pěkné HTML Exceptions na výstup + zaslání e-mailu?
Děkuji předem za konstruktivní pomoc,
Kamila.
Editoval kolibla (17. 10. 2020 1:18)
- Kori
- Člen | 73
Ahoj,
uprav si to na
try
{
$this->custom();
}
catch (\Exception $e)
{
Debugger::log($e, ILogger::EXCEPTION);
}
Btw, Pokud si to dobre z hlavy pamatuju, tak mail se posila od ILogger::ERROR vys, takze si tim muzes ridit, kdy to jen ulozit a kdy i poslat mail.
Editoval Kori (17. 10. 2020 2:03)
- kolibla
- Člen | 25
Kori napsal(a):
Ahoj,
uprav si to na
try { $this->custom(); } catch (\Exception $e) { Debugger::log($e, ILogger::EXCEPTION); }
Btw, Pokud si to dobre z hlavy pamatuju, tak mail se posila od ILogger::ERROR vys, takze si tim muzes ridit, kdy to jen ulozit a kdy i poslat mail.
Však to tak volám, přesně tak to mám v catchi, akorát to nefrčí tak, co požaduji.
- Kori
- Člen | 73
V tvym kodu ukladas jen message, ne celou exception…
Debugger::log($e->getMessage(), ILogger::EXCEPTION);
Pripadne se podivej do tempu, jestli tam nemas soubor
email-sent
. Pokud jo, tak ho smaz a mel by ti hned prijit mail
s dalsi vyjimkou. Je to kvuli tomu, aby ti nechodilo milion mailu
najednou…
Editoval Kori (17. 10. 2020 2:54)