tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Dibi Profiler

před 11 lety

simon
Člen | 98

Zdravim,
chci jako vypsi profileru pouzivat FireBUG (pres FirePHP).
Ale nevim jak tam jednoduse dostat vypsi VSECH sql dotazu i s jejich delkou trvani a vysledkem.

Jde to udelat nejak jednoduse jako napriklad v Zend Frameworku?
Predem velice dekuji.

před 11 lety

David Grudl
Nette Core | 6806

Podporu pro FireBUG má třída Nette\Debug (viz fireDump a fireLog). Propojení s dibi by asi vyžadovalo více úsilí, podívám se na to a dám vědět.

před 11 lety

simon
Člen | 98

diky moc, ja dokazu do firebugu dostat posledni dotaz, jeho cas, celkovy cas atd. ale jak tam dostat vsechny dotazy probehle na strance to nevim. asi by nemusela byt primo integrace, staci jen metoda ktera bude vracet pole se vsemy probehlymi dotazy.

jeste jednou diky

před 11 lety

David Grudl
Nette Core | 6806

Logování do Firebugu by mělo fungovat, stačí aktivovat profiler:

dibi::connect(array(
    'driver'   => 'sqlite',
    'database' => 'sample.sdb',
    'profiler' => TRUE, // zapne profiler
));

před 11 lety

simon
Člen | 98

diky moc, to je přesně ono!

před 11 lety

PetrP
Člen | 587

Dají se vypisovat všechny dotazi s tou délkou atd i jinam než do fireBugu? (třeba do pole)

před 11 lety

phx
Člen | 652

Trosku se mi michaji profiler jako FireBug a profiler jako logovani do souboru.

Logovani do souboru zapnut takto? Zadne nastavovani v dibi:connect()???

$profiler = new DibiProfiler;
dibi::getConnection()->setProfiler($profiler);
dibi::getProfiler()->setFile('log/dibi.log');

Kdyz ale pridam do dibi::connect() nastaveni 'profiler'=>TRUE tak se bude logovat do souboru a zaroven do FireBug? Takze pokud toto nastaveni dam na produkcni server tak je to dost velika dira;)) Takze na to asi bacha co?

A posledni vec. Jak logovat do souboru POUZE chybne dotazy? Nebo idealne chybne dotazy udelat do jineho souboru? Jde to nejak?

před 11 lety

phx
Člen | 652

Tak jsem se do toho kapku ponoril a mel bych tyto pripominky:

  • Neco podobneho jako DibiProfiler::filter by mohlo byt i na file
  • Libilo by se i vice souboru s ruznymi filtry

Uznavam, ze toto si muzu udelat sam, ale tohle by mel David opravit:

  • Pokud na produkcnim serveru chci logovat SQL do souboru automaticky se pousti i FireBug, coz je celkem bezpecnostni dira. Idealni by bylo aby to respektovalo nejake nastaveni v INI
// DibiProfiler
    public function __construct()
    {
        // dira...
        $this->useFirebug = isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP/');
    }

A jen pro upesneni moje uvedena metoda logovani do souboru preplacne nastaveni z INI. Abych to uvedl na pravou miru jak jsem to ted pochopil.

Nastaveni profileru:

$profiler = new DibiProfiler;
dibi::getConnection()->setProfiler($profiler);

// nebo v dibi::connect
dibi::connect(array(
        'driver'   => 'sqlite',
        'database' => 'sample.sdb',
        'profiler' => TRUE, // zapne profiler
));

// nebo v INI
// database.profiler = TRUE

Bohuzel kdyz je zapnuty profiler tak se posilaji SQL dotazy do FireBug. Nebo to lze nejak vypnout?

Pokud je zapnuty profiler lze zapnout logovani do souboru:

dibi::getProfiler()->setFile('log/dibi.log');
// lze to i nejak v INI ???

před 11 lety

romansklenar
Člen | 657

Já bych jen dodal jeden tip: bylo by užitečné, kdyby šlo metodě setFile předat i nevyexpandované proměnné tak jako u metody Nette\Debug::enable()

dibi::getProfiler()->setFile('%logDir%/dibi.log');

Editoval romansklenar (30. 10. 2008 22:49)

před 11 lety

David Grudl
Nette Core | 6806

phx napsal(a):

Trosku se mi michaji profiler jako FireBug a profiler jako logovani do souboru.

Mám v plánu to rozdělit do dvou tříd.

Logovani do souboru zapnut takto? Zadne nastavovani v dibi:connect()???

$profiler = new DibiProfiler;
dibi::getConnection()->setProfiler($profiler);
dibi::getProfiler()->setFile('log/dibi.log');

Profiler se zapne buď přes connect() (volba 'profiler' => TRUE nebo 'profiler' => 'jmenotridyprofileru'), nebo metodou setProfiler(). Obojí je ekvivalentní.

Logování do souboru se musí zapnout až ve třídě DibiProfiler metodou setFile().

Kdyz ale pridam do dibi::connect() nastaveni 'profiler'=>TRUE tak se bude logovat do souboru a zaroven do FireBug? Takze pokud toto nastaveni dam na produkcni server tak je to dost velika dira;)) Takze na to asi bacha co?

No logování SQL do souboru vůbec nebylo zamýšleno pro produkční servery (tam má smysl logovat výjimky).

A posledni vec. Jak logovat do souboru POUZE chybne dotazy? Nebo idealne chybne dotazy udelat do jineho souboru? Jde to nejak?

Chybnými dotazy myslíš dotazy, které vyhodí výjimku? Přikláním se v poslední době spíš k tomu, aby se tento úkol z dibi přenesl na aplikaci. Je to téma k diskusi.