Debug::processException() – udelat samostanou metodu logException()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Wosonj
Člen | 36
+
0
-

Občas by se mi hodila možnost zotavit se z výjimky a pokračovat v běhu, ale tu výjimku stejně zalogovat. Teď k tomu lze použít Nette\Debug::processException(), ale má to vady – výjimka se uloží stejně jako ty ostatní, takže nepoznám, jestli se aplikace zotavila nebo ne. Kromě toho se zapíše do error.log řádek PHP Fatal error: Uncaught exception, což taky není pravda.

Navrhuji vyjmout logovací část do

<?php
public static logException(Exception $exception, $filename)
?>

která by pouze uložila výjimku a nedělala nic jiného. Jméno souboru by bylo dobré mít možnost zvolit, tím by se odlišily výjimky „Uncaught Exception“ od těch ostatních.

rokerkony
Člen | 122
+
0
-

tohle by se mi taky líbilo :-) teď jsem na to narazil :-) je to už nějak vyřešené?

Honza Kuchař
Člen | 1662
+
0
-

proccessException se tak v produkčním režimu snad chová ne? Vlastně musí, já to tak používám a funguje to.

rokerkony
Člen | 122
+
0
-

Chová se relativně tak jak má, ale nedělá rozdíl mezi normální exception která nastane při neočekávané chybě aplikace a touhle ošetřenou, kterou si já chci jen uložit. A kdyby šlo zadat jak píše Wosonj to, aby se ukládaly do jiné složky, tak by to bylo úplně ideální. :-)

Petr Motejlek
Člen | 293
+
0
-

Mě není úplně jasné, k čemu by to mělo být – dělit výjimky na několik druhů, podle toho, jak jsem ss kterou počítal. Každá výjimka je špatná, ať už se s ní počítá, nebo ne…

Na druhou stranu si dovedu představit, že by se nějak rozdělovaly podle třídy, kterou mají, takže by se uchovávaly ve zvláštních adresářích např. InvalidArgumentException, InvalidStateException, AuthorizationException, atd. Šlo by pak hezky poznat jedním pohledem, že třeba všechny výjimky, co aplikace měla, vznikly, když někdo neoprávněně chtěl něco dělat (bude existovat jen adresář AuthorizationException).

Honza Kuchař
Člen | 1662
+
0
-

Na druhou stranu si dovedu představit, že by se nějak rozdělovaly podle třídy, kterou mají, takže by se uchovávaly ve zvláštních adresářích např. InvalidArgumentException, InvalidStateException, AuthorizationException, atd. Šlo by pak hezky poznat jedním pohledem, že třeba všechny výjimky, co aplikace měla, vznikly, když někdo neoprávněně chtěl něco dělat (bude existovat jen adresář AuthorizationException).

To je geniální nápad! Máš bod!


K tomu logování: Ano, občas by se to hodilo, ale už to něco na logování vzniklo (a funguje to dobře): https://componette.org/search/?…

Editoval honzakuchar (19. 4. 2010 10:01)

rokerkony
Člen | 122
+
0
-

jj i tohle by byla super feature :) a asi by vyresila i muj problem protoze mam vlastni exception :-)

David Grudl
Nette Core | 8147
+
0
-

V současné verzi už to jde pomocí Debug::log($exception). Závažnost logované výjimky můžeš ovlivnit druhým parametrem, který vlastně rozhoduje o tom, má-li se administrátorovi poslat email.