Ladenka v autodetekci a zasilani emailu
- crempa
- Člen | 198
Ahoj posila vam ladenka emaily kdyz ji inicializujete takto?
<?php
Debug::enable(NULL, NULL, "example@example.com");
?>
tj. necha se aby si brala info kam logovat z Environmentu… me neposila (ani nevytvari .monitor) ackoli logy se ukladaji normalne
pokud pouziju
<?php
Debug::enable(NULL, "/var/www/..../fw_app/log/php_error.log", "example@example.com");
?>
tak funguje logovani i odesilani emailu
btw: ze zdrojaku jsem tak nejak pochopil ze pro logovani staci udelat v aplikacnim adresari jen adresar log a tomu povolit zapis… Environment logDir se tak defaultne nastavuje ze?
- pmg
- Člen | 372
Koukněme na řádek 354 v Laděnce:
self::$sendEmails = $logFile && $email;
Pokud jako druhý parametr Debug::enable
místo
NULL
zadáme TRUE
, proběhne autodetekce logovacího
souboru stejně. Uvedený výraz ale vrátí TRUE
, takže se email
bude posílat.
Debug::enable(NULL, TRUE, "example@example.com");
Navrhuji úpravu řádku 354:
self::$sendEmails = $logFile !== FALSE && $email;
Pozastavím se ještě nad následujícím kódem.
if (mt_rand() / mt_getrandmax() < self::$emailProbability) {
$monitorFile = self::$logFile . '.monitor';
$saved = @file_get_contents($monitorFile); // intentionally @
$actual = (int) @filemtime(self::$logFile); // intentionally @
if ($saved === FALSE || $actual === 0) {
file_put_contents($monitorFile, $actual);
} elseif (is_numeric($saved) && $saved != $actual) { // intentionally ==
self::sendEmail('Fatal error probably occured');
}
}
Probíhá první test, soubor monitor neexistuje. Soubor se vytvoří a zapíše se do něj nula, datum modifikace se změní na aktuální čas. Při druhém testu se tak splní druhá podmínka a odešle se informace o možné chybě.
- crempa
- Člen | 198
Mas pravdu,
kdyz jsem si to procital poprve, tak me uslo ze se tam jeste stale bere $logFile z parametru a podminka tak neni vyhodnocena kladne, diky.
Kdyz jsem uz nacal tu diskusi o ladence, tak co takhle rozsirit moznost odesilat email pouze jednou na identicke chyby, ale neblokovat prvni chybou vsechny dalsi ? Jen tak z patra me napada ukladat treba hashe vypisu (Stack trace) a ty pak porovnavat…
- kravčo
- Člen | 721
pmg napsal(a):
Probíhá první test, soubor monitor neexistuje. Soubor se vytvoří a zapíše se do něj nula, datum modifikace se změní na aktuální čas. Při druhém testu se tak splní druhá podmínka a odešle se informace o možné chybě.
Prvý prechod je v poriadku, zmení sa dátum modifikácie súboru
$monitorFile
. V druhom sa porovná obsah súboru
$monitorFile
s časom poslednej zmeny súboru
$logFile
, v prípade, že sa zmenil, pošle sa mail o tom, že
zrejme nastala nezachytiteľná chyba. Toto nastane len v prípade, že mail
nebol zatiaľ odoslaný a log súbor sa zmenil → nastalo niečo, čo
Debug
nedokázal zachytiť.
crempa napsal(a):
Kdyz jsem uz nacal tu diskusi o ladence, tak co takhle rozsirit moznost odesilat email pouze jednou na identicke chyby, ale neblokovat prvni chybou vsechny dalsi ? Jen tak z patra me napada ukladat treba hashe vypisu (Stack trace) a ty pak porovnavat…
Keď dostaneš mail o chybe, nejde o obsah mailu, ako skôr o to, že niečo nie je v poriadku – treba skontrolovať logy a zistiť čo. Ukladanie všemožných chýb by bol (podľa mňa) naozaj zbytočný overhead. Myslím, že odosielanie mailov je práve na to, aby upozornilo a ostatné info potrebné na opravu už nájdeš na serveri…
Editoval kravco (28. 2. 2009 19:31)