Nette:Debug a viacnasobne logovanie exceptions

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

Ahoj David.

Dnes sme dosli do bodu, kedy sme potrebovali pocas behu skriptu (ktory pobezi z Cli) viacnasobne logovanie. Musel som sa trosku pohrat s Nette\Debug, aby som sa dopracoval k cielenemu vysledku.

  1. v prvom rade musim menit Debug::$time, pretoze na zaklade tejto statickej premennej (ktora sa nastavi len raz) sa tvori meno pre ukladane html z ladenky.
  2. druhy problem nastava pri includovani Debug.templates/bluescreen.phtml, kde sa v prvej casti skriptu inicializuju funkcie. preto tento skript som rozdelil na 2 casti, na funkcie a zbytok a funkcie includujem cez:
require_once dirname(__FILE__). '/bluescreen-functions.php';

Potom to uz bezi a mozem v skripte vyuzivat silu ladenky opakovane podla potreby:

try {
	...
} catch (Exception $e) {
	Debug::$time= microtime(true);
	Debug::exceptionHandler($e);
}

...

Je jasne ze Nette\Debug bola navrhnuta tak, aby sa po exception beh skriptu zastavil. Ale su situacie, kedy si iste casti bloku chceme osetrit cez try/catch a nie kazdy throw exception musi zakonite skoncit ukoncenim skriptu.

Na druhej strane chceme vyuzivat silu „ladenky“ a mat k dispozicii jej prehladny vystup, hlavne v log adresari na production servri.

Preto sa chcem spytat, ci by to nestalo za implementovanie, aby bola moznost nastavit Nette\Debug na opatovne logovanie a generovanie html exceptions v pripade, ze je zapnute logovanie.

phx
Člen | 651
+
0
-

Pokud by se upravovala Ladenka tak bych se primlouval za dalsi upravu. Pouzivam Debug::timer() na mereni casu spracovani cele stranky, ale jakmile potrebuji nekde neco dalsiho, nebo nedej boze by to vyuzivala nejaka komponenta 3. strany tak mi to totalne naboura mereni. Neslo by pridat parametr na ‚namespace‘ mereni. Tim by si kazdy mohl merit X ruznych veci zaroven.

David Grudl
Nette Core | 8228
+
0
-

phx napsal(a):

Pokud by se upravovala Ladenka tak bych se primlouval za dalsi upravu. Pouzivam Debug::timer() na mereni casu spracovani cele stranky, ale jakmile potrebuji nekde neco dalsiho, nebo nedej boze by to vyuzivala nejaka komponenta 3. strany tak mi to totalne naboura mereni. Neslo by pridat parametr na ‚namespace‘ mereni. Tim by si kazdy mohl merit X ruznych veci zaroven.

přidáno

phx
Člen | 651
+
0
-

DIKY;)

David Grudl
Nette Core | 8228
+
0
-

edke napsal(a):

2. druhy problem nastava pri includovani Debug.templates/bluescreen.phtml, kde sa v prvej casti skriptu inicializuju funkcie. preto tento skript som rozdelil na 2 casti, na funkcie a zbytok a funkcie includujem cez:

Ok, upravim bluescreen.phtml.

Je jasne ze Nette\Debug bola navrhnuta tak, aby sa po exception beh skriptu zastavil. Ale su situacie, kedy si iste casti bloku chceme osetrit cez try/catch a nie kazdy throw exception musi zakonite skoncit ukoncenim skriptu.

Plánuju přidat metodu processException, která by to měla řešit, ale není stále implementace dokonalá – takže časem.

David Grudl
Nette Core | 8228
+
0
-

Právě jsem nahrál novou verzi Nette\Debug. Ta by měla řešit zmíněné záležitosti, navíc přidává metodu Debug::processException($exception), která má za úkol zobrazit/zalogovat výjimku a předat řízení zpět aplikaci (narozdíl od Debug::exceptionHandler()).

Proměnnou Debug::$html jsem nahradil srozumitelnější Debug::$consoleMode.

Jan Tvrdík
Nette guru | 2595
+
0
-

Nebylo by možné naučit Nette\Debug vkládat do emailu zprávu vyjímky? Představoval bych si to jako další proměnnou vedle %host% a %date%.

David Grudl
Nette Core | 8228
+
0
-

To by asi šlo. Přidám proměnnou %message%.