Módy laděnky – logování a zobrazování laděnky
- Patrik Votoček
- Člen | 2221
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ů:
- zobrazování chyb (DEVELOPMENT)
- logování chyb (PRODUCTION)
- autodetekce (1. / 3. varianta na základě IP)
přidat:
- 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)
- Jan Tvrdík
- Nette guru | 2595
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
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
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:
- Production – vypnuté dumpy, vypnutý výstup redsceenu, zapnuté logování
- 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)
- Patrik Votoček
- Člen | 2221
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
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.
- westrem
- Člen | 398
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
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.
- juzna.cz
- Člen | 248
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)
- Patrik Votoček
- Člen | 2221
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
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…
- Patrik Votoček
- Člen | 2221
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 | 8215
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
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
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 budeTRUE
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 | 1662
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… ;-))