Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Nový profiler a logger

Jednou z nedokončených věcí v dibi je logování a profilování. Kdysi jsem k tomu chtěl použít handlery (metody dibi::addHandler(), dibi::startLogger()), ale dnes se mi zdá vhodnější nasazení jediného objektu do pozice loggeru & profileru. Od revize 155 je tedy možné zapnout nad každým spojením profiler. A to buď přímo při připojování:

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

Nebo manuálně:

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

Profiler je objekt implementující rozhraní IDibiProfiler, jako výchozí se používá DibiProfiler. Ten umí logovat do souboru a do konzoly Firebugu.

// logování do souboru:
dibi::getProfiler()->setFile('log.sql');
// náhrada za dřívější dibi::startLogger('log.sql')

Logování do Firebugu se zapíná automaticky, je-li detekována jeho přítomnost. Vyžadován je Firefox verze 2 nebo 3, nainstalované a zapnuté rozšíření Firebug a FirePHP.

Zatím jde stále o rozpracovanou koncepci, implementace není kompletní. Bud rád za připomínky.

 

#2 před 4 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

Tak pevni problem:
firebug vyhazuje chybu:

Variable Viewer         Close
array(
[0] =>
'There was a problem writing your data from X-FirePHP-Data['FirePHP.Firebug.Console'] to the console.'
...

[1] =>
array(
... 4 elements ... )

['name'] =>
'SyntaxError'
...

['message'] =>
'Bad string'
...

['at'] =>
2
...

['text'] =>
'{{"FirePHP.Firebug.Console":[["TABLE",["dibi profiler (1 SQL queries took 0.685 ms)",[["Time","SQL Statement","Rows","Connection"],["0.685","SELECT * FROM `portal_articles` ORDER BY `a_created`",4,"mysqli\/0"]]]]]}"FirePHP.Firebug.Console":[["WARN","Notice: Undefined index: callback in \/home\/simon\/Workspace\/php\/nette\/project\/bassportal\/app\/presenters\/AdminModule\/ArticlesPresenter.php on line 29"],["WARN","Notice: Undefined index: query in \/home\/simon\/Workspace\/php\/nette\/project\/bassportal\/app\/presenters\/AdminModule\/ArticlesPresenter.php on line 32"],["WARN","Notice: Undefined index: delData in \/home\/simon\/Workspace\/php\/nette\/project\/bassportal\/app\/presenters\/AdminModule\/ArticlesPresenter.php on line 35"]]}'
...

)
)

nejak se tam do profileru pripletly i notice pri neexistenci indexu. tu chybu si odstranim ale podle me by mel byt vypis profileru a zatim dva notice.

na strance pouzivam toto volani databaze s pouzitim dibitable

<?php

require_once 'models/AdminModule/Articles.php';
            $articles = new Articles;
            $articlesData = $articles->findAll('a_created');

?>

 

#3 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: Nový profiler a logger

Tam asi dochází k tomu, že do firebugu zapisují dvě různé třídy, konkrétně dibi a Nette\Debug. Zatím spolu bohužel nespolupracují, takže laděnku vypni: Debug::$useFirebug = FALSE

 

#4 před 4 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

aha, tak to me nedoslo. vypinat to asi nebudu, delam ted hodne prenosu na pozadi, takze firebug potrebuju. kazdopadne diky.

 

#5 před 4 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: Nový profiler a logger

Bylo by mozne opet zachovavat zpetnou kompatibilitu alespon nekolik verzi?

Nebo danou funkci zachovat po nejakou dobu s tim, ze by vyhazovala vyjimku (ladenka) s popisem co se zmenilo.

 

#6 před 4 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

Pokud neni na serveru dostupna funkce json_encode(), potom pri zaplem dibiprofileru dostanu pouze bilou stranku smrti. Vyresil jsem to pripojenim do bootstrapu soubor compatibility.php z nette. ale to neni elegantni protoze se fce vola vzdy, ikdy treba neni zadny dotaz na databazi.
Slo by nejak tu fci zapracovat do profileru?
jo a ani s tou fci to poradne nefunguje. firebug hazi nasledujici chybu:

array(
 [0] => 'There was a problem writing your data from X-FirePHP-Data['FirePHP.Firebug.Console'] to the console.'


 [1] => array(

   ['name'] => 'SyntaxError'

   ['message'] => 'Bad string'


   ['at'] => 173


   ['text'] => '{"FirePHP.Firebug.Console":[["TABLE",["dibi profiler (1 SQL queries took 0.207 ms)",[["Time","SQL Statement","Rows","Connection"],["0.207","SELECT *,DATE_FORMAT(a_created,\'%e. %c. %Y %H.%i:%s\') as fCreated FROM `portal_articles` INNER JOIN `portal_admin_users` ON au_id = a_author ORDER BY a_created DESC",5,"mysqli\/0"]]]]]}'


  )
)

 

#7 před 4 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: Nový profiler a logger

Tato funkce je tusim v balicku Nette v jednom souboru. Pokud se nepletu tak json_encode() je az od PHP 5.3

 

#8 před 4 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

http://cz2.php.net/…n-encode.php

je od verze (PHP 5 >= 5.2.0, PECL json:1.2.0–1.2.1) ale na serveru mi chybi prave ten PECL

a nahodou v jakem soubou je to nevis?:D

 

#9 před 4 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: Nový profiler a logger

OK

Nette/examples/compatibility.php

http://code.google.com/…tibility.php

Editoval phx (25. 10. 2008 13:02)

 

#10 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: Nový profiler a logger

Spojení na FirePHP už funguje nezávisle na Nette, používá vlastní json_encode v PHP < 5.2 a updatoval jsem na novější verzi protokolu.

Vyžaduje FirePHP minimálně ve verzi 0.2 (ke stažení na http://www.firephp.org)

 

#11 před 4 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

diky uz to funguje skvele.
mozna ale stejnym neduhem trpi i nette. tohle mi pristalo v error logu:

PHP Fatal error: Call to undefined function json_encode() in /domains1/nh441700/public/libs/Nette/Application/AjaxDriver.php on line 82

 

#12 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: Nový profiler a logger

U Nette deklaruju minimální verzi PHP 5.2.2, takže to už nechám na uživateli, aby si zajistil vložení souboru compatibility.php. Tam totiž nemusí fungovat i víc věcí.

 

#13 před 4 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

aha, tak to pak jooo

 

#14 před 3 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

Chci se zeptat, jde nejak nastavit aby na ostrem serveru nebyli sql dotazy logovany firebugem ale dalo se zapisovat pouze do souboru?
Predem diky.

 

#15 před 3 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

Zkousel jsem totiz Debug::$useFirebug = false; ale to hlasi ze pristupuju neopravnene k privatnimu atributu.

 

#16 před 3 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: Nový profiler a logger

Na ostrém serveru se loguje pouze do souboru.

 

#17 před 3 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

No tak to mam teda nekde chybu. Protoze na ostrem serveru se mi loguje jak do firebugu (SQL) tak i do souboru.sql

v configu mam toto

;produkcni
[production < common]
;database
database.driver     = mysqli
database.lazy       = true

database.host       = localhost
database.user       = asdfasdf
database.pass       = asdfasdfasdf
database.database   = asdfasdfasfasf
database.charset    = utf8
database.profiler   = true

;aplication
variable.enableProfiler = false

mode.live = yes
mode.debug = false

 

#18 před 3 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

logovani spoustim v bootstrapu takto

dibi::getProfiler()->setFile(LOGS_DIR . ‚/dblog.sql‘);

 

#19 před 3 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: Nový profiler a logger

Pardon, neuvědomil jsem si že nejsem na fóru Nette ale dibi :-)

Jasně, u dibi se produkční a vývojářský mód nerozlišuje. Spíš mě nenapadlo, že by bylo užitečné logovat SQL příkazy na produkčním serveru. K čemu je to dobré?

 

#20 před 3 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: Nový profiler a logger

Napriklad doma mam par destovacich dat v DB a jsem linej tvorit „zbytecna“ kvanta dat kuli testovani zateze a tak. Na produkcnim serveru se to casem udela samo a dle logu pak mohu vyhodnotit co kde je spatne, co kde vazne a spol. Navic tam muze byt jinak nastavena DB a tak by bylo fajn vedet, ktere dotazy ji „nedelaji dobre“ a co upravit na nastaveni DB.

Coz ale vytvari druhou otazku: co rotovani logu? Kdysi jsem delal neco na principu nazev.{cislo_dne_v_tydnu_tzn0-7}.log. + pokud je soubor starsi nez dnes tak smaz a loguj. Takze jsem mel 7 dni stare logy maximalne. Jen clovek musel vedet co je za den aby se podival do sptavneho souboru.

 

#21 před 3 lety

tondovo
Člen
Registrovaný: 26. 11. 2008
Příspěvky: 12

Re: Nový profiler a logger

Chtěl bych upozornit, že v quick start je ještě starý způsob logování:

dibi::startLogger('log.txt', TRUE);

Když jsem zkoušel logování

dibi::getProfiler()->setFile('log.sql');

, tak mi to uloží jen první sql dotaz, další dotazy se už nepřidají, když sql dotaz selže, tak se neuloží vůbec. Dělám něco špatně, nebo jsem nepochopil princip?

Editoval tondovo (26. 11. 2008 14:33)

 

#22 před 3 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

No podle me se ukladaji vsechny dotazy ale jen jednou. tak je to aspon u me.
Kazdopadne mi to porad loguje do firebugu i do souboru. fakt nevim cim to je,

 

#23 před 3 lety

simon
Člen
Registrovaný: 7. 10. 2008
Příspěvky: 173

Re: Nový profiler a logger

Pockej az se k tomu vyjadri David, opravdu nevim jake dotazy se presne loguji.

 

Zápatí