Módy laděnky – logování a zobrazování laděnky

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

Předem co mě k tomu vede:

Narazil jsem na potřebu zobrazovat a zároveň i logovat laděnku (což nejde – nebo sem nepřišel na to jak toho docílit). A to hlavně:

  • v CLI kde je traceroute takřka nepoužitelný
  • na development serveru kde mám zobrazování laděnky zapnuté ale během dne tam brouzdá i produkťák a další lidi a tak by se mě hodilo a by případné chyby které to na ně bafne byly zaznamenány

Podle všeho nejsem sám: https://forum.nette.org/…zim-logovani

navrhuji tedy vedle stávajících módů:

  1. zobrazování chyb (DEVELOPMENT)
  2. logování chyb (PRODUCTION)
  3. autodetekce (1. / 3. varianta na základě IP)

přidat:

  1. zobrazování chyb + logování (nazvaný třeba LAB)

Až v při samotném vykreslování rozhodovat jestli jsem v CLI, Web, AJAX. Dále pokud není z hlaviček zjištěna existence rozšíření FireLoggeru posílat při isAjax() klasicky laděnku (dá se potom udělat něco takového: https://gist.github.com/875873).

Dalším částečně souvisejícím bodem by mohlo být posílání debugbaru jako jedné z položek JSON response kde by navěšený javascript překreslil data v debugbaru.

Editoval Patrik Votoček (18. 3. 2011 11:35)

srigi
Nette Blogger | 555
+
0
-

Ano, takato poziadavka tu uz padla.

Jan Tvrdík
Nette guru | 2595
+
0
-

Máš štěstí, že tu nemám moderátorská práva, jinak bych tě přesunul do feature requests. RFC vyžaduje hlubší analýzu problematiky (soupis současných možností konfigurace a vazeb mezi nimi, srovnání s minulostí, důvody pro implementaci, konkrétní návrh implementace, problémy daného návrhu, …)

Patrik Votoček
Člen | 2221
+
0
-

vím co to je RFC nemusíš mě poučovat! taky má několik fází a tohle je jenom první z nich (na tom zbytku pracuju)…

Jan Tvrdík
Nette guru | 2595
+
0
-

Osobně bych daný problém řešil jiným způsobem, a to odstraněním silné vazby módu a logování. Tj. existovaly by stále dva módy:

  1. Production – vypnuté dumpy, vypnutý výstup redsceenu, zapnuté logování
  2. Development – zapnuté dumpy, …, vypnuté logování.

To, zda se bude logovat, by řídila public static $logErrors = NULL. Při zapnutí laděnky a tím i nastavením módu by se v případě, že self::$logErrors === NULL provedla inicializace v závislosti na módu (self::$logErrors = self::productionMode). Vývojář by ale měl možnost před nebo po zavolání Debug::enable(...) nastavit Debug::$logErrors ručně tak, jak mu to bude v dané situaci vyhovovat.


To posílání DebugBaru JSONem se mi líbí, ale netuším, jak to půjde naimplementovat.

Editoval Jan Tvrdík (18. 3. 2011 11:48)

jtousek
Člen | 951
+
0
-

Byl bych pro přidání nějakého vlastního módu, kde by si musel programátor vše nastavit. Vedle logování a zobrazování laděnky ještě to, zda se zobrazuje výstup z dump funkcí. Plus všechno ostatní…

Patrik Votoček
Člen | 2221
+
0
-

to by se teoreticky dalo řešit tak že nový mód by byl Nette\Debug::ALL ale nastavit by se dalo i ~Nette\Debug::ALL.

Ondřej Mirtes
Člen | 1536
+
0
-

Ahoj,
nedávno jsem vytvořil (podle nápadu Vaška Purcharta třídu ConsoleDebug, která zařizuje zachytávání výjimek v CLI módu, uložení výpisu Laděnky do souboru a spuštění prohlížeče s tímto souborem. Ladění v příkazové řádce je tak mnohem pohodlnější. Myslíte, že má smysl to dát do Nette?

Pro pohodlnou spolupráci s PHPUnitem je potřeba ve vašem BaseTestCase překrýt metodu runBare(), která zařídí, že se do ConsoleDebug pošlou jen ty výjimky, které vás zajímají (tj. pouze E jako errors & exceptions, F/S/I nikoli).

Pro zprovoznění stačí ve vašem bootstrapu zavolat:

ConsoleDebug::enable('C:\Users\admin\AppData\Local\Google\Chrome\Application\chrome.exe %s');

Funguje to s libovolným browserem, stačí k němu uvést cestu a použít %s placeholder pro nahrazení cesty k souboru.

Patrik Votoček
Člen | 2221
+
0
-

wow tak to je bomba! musím na to mrknou podrobněji

westrem
Člen | 398
+
0
-

Patrik Votoček napsal(a):

vím co to je RFC nemusíš mě poučovat! taky má několik fází a tohle je jenom první z nich (na tom zbytku pracuju)…

Vies priblizne odhadnut nakolko su tie veci co spominas tazke na implementaciu? V Debug pre 0.9.* som sa celkom vyznal, ale kod 2 alpha som este neskumal.

Napad ako taky sa mi vsak velmi pozdava a rozhodne som za to, aby sa do toho ponorilo hlbsie a zistilo co je a nie je mozne a co by bolo vhodne na implementaciu.

juzna.cz
Člen | 248
+
0
-

Hodilo by se take nejake predani chyb pri presmerovani. Pokud odeslu formular, pri zpracovani nastane nejaka drobna chyba (E_NOTICE; co by se normalne zobrazila dole v debug panelu) a pak se provede presmerovani, pak se o tom uz nedozvim.

Napada me pouzit podobny princip jako je u flashMessage(), tzn chyby by se ulozily a predaly zobrazily se po presmerovani.

A zobrazovani do debugbaru by mohlo byt i pri pouziti ajaxu, napr. v JSON prenaset informace o dronych chybach a pak je do debugbaru pridat.

Patrik Votoček
Člen | 2221
+
0
-

Nette\Debug::$strictMode = TRUE;

juzna.cz
Člen | 248
+
0
-

Zkusil jsem experimentalne udelat zobrazovani chyb pri ajaxu, a to:

  • male chyby (jako E_NOTICE) se prenasi v JSON payloadu a zobrazi se v DebugBaru
  • velke chyby (vyjimky) se prenesou stejne jako bez ajaxu a jsou zobrazny do noveho okna

Je potreba drobna uprava v Nette a tento upraveny jquery.nette.js a kousek kodu do BasePresenteru.

Co na to rikate?

Zatim se mi to docela libi, protoze to pekne zobrazi chyby i v jinych browserech nez je FF+Firebug+FirePHP.

Editoval juzna.cz (5. 4. 2011 5:35)

juzna.cz
Člen | 248
+
0
-

Jak jsem navrhoval ve zprave #11, zkusil jsem udelat take zobrazovani chyb po poresmerovani. Implementace k nahlednuti zde

David Grudl
Nette Core | 7887
+
0
-

Nette\Debug::$strictMode = TRUE;

Co z toho udelat $deathMode?

Patrik Votoček
Člen | 2221
+
0
-

To by možná šlo (dokonce bych se nebál ho defaultně zapnout – myslim to vazne a vim ze to neprojde). Btw mam se pokoušet implementovat to ostatní nebo se na to mam vy *** (to je otázka asi hlavně na tebe davide abych nedělal něco co ty už máš)?

kravčo
Člen | 721
+
0
-

Patrik Votoček napsal(a):

To by možná šlo (dokonce bych se nebál ho defaultně zapnout – myslim to vazne a vim ze to neprojde). Btw mam se pokoušet implementovat to ostatní nebo se na to mam vy *** (to je otázka asi hlavně na tebe davide abych nedělal něco co ty už máš)?

Keď sa pokúsiš to implementovať, posunie ťa to… Bez ohľadu, či to David má alebo nie…

Filip Procházka
Moderator | 4668
+
0
-

kravčo: Né každý má čas si hrát :)

Patrik Votoček
Člen | 2221
+
0
-

Ještě než se pustím do implementace tak shrnutí:
Nově bude místo módu PRODUCTION a DEVELOPMENT:

  • NULL (autodetekce – na zakladě IP jakdo doposavad)
  • DISPLAY (zobrazí laděnku)
  • LOG (zaloguje laděnku)
  • ALL (zobrazí i zalogujue)
  • ~ALL (tady si nejsem úplně jistej jestli to doopravdy implementovat – má využití)

Pokusím se integrovat i Ondrovo udělátko. A taky se pokusím implementovat „ajaxový“ debugbar.

David Grudl
Nette Core | 7887
+
0
-

Debug módy PRODUCTION a DEVELOPMENT nemá. Je tu proměnná Debugger::$productionMode. Pokud je true, tak se chyby logují, i v console režimu.

Patrik Votoček
Člen | 2221
+
0
-

Ano ale pak v console režimu dostanu informaci „Server Error“ nebo tak něco (bez podrobností). Nehledě na to že automaticky je v console režimu FALSE.

Patrik Votoček
Člen | 2221
+
0
-

Tak jsem se pokusil o částečnou implementaci. viz: https://github.com/…-debug-modes

Co to umí:

  • FireLogger se inicializuje / používá pouze pokud je v prohlížeči puštěn (pokud ne pošle se laděnka a která se dá zpracovat třeba takhle)
  • přidal jsem Debugger::$loggerMode (který nemá ve výchozím nastavení vpodstatě žádný efekt) pokud ale bude TRUE tak rázem v development prostředí zobrazujete a zároveň logujete chyby.
  • integroval jsem Ondrovo udělátko, které v konzolovém módu automaticky otevírá soubor s laděnkou v prohlížeči. (zapnete pomocí Debugger::$browser = "C:\Users\admin\AppData\Local\Google\Chrome\Application\chrome.exe %s")
Honza Kuchař
Člen | 1661
+
0
-

Vzhledem k rozsahu úprav jsem jednoznačně pro! :-) (V ajaxovém režimu totiž doteď používám vždy production mode, abych se vůbec něco dozvěděl… ;-))