Oznámení
Omlouváme se, provoz fóra byl ukončen
Logování SQL dotazů do FireLoggeru
Upozornění: Tohle vlákno je hodně staré.
před 8 lety
- Milo
- Nette Core | 1119
Při vývoji s oblibou používám Firebug a FireLogger a to v té
nejjednodušší podobě flog($var)
. Také se mi líbí jak dibi
loguje do Firebug konzole. Je to ale trochu na hlavu, stále překlikávat mezi
Firebug konzolí a FireLoggerem. Stačí však vlastní malý DibiProfiler,
který do FireLoggeru loguje. Navíc podle délky trvání dotazu použije
příslušný log level.
<?php
/**
* Odesílá SQL dotazy do FireLoggeru.
* @todo Implementovat FireLogger protokol namísto používání třídy FireLogger.
*
* Podle doby trvání SQL dotazu použije příslušný log level.
* >= 100ms - critical
* >= 15ms - warning
* < 15ms - info
*/
class MyDibiProfiler extends DibiProfiler
{
protected static $flogCnt = 1;
public function after( $ticket, $res = NULL )
{
if (!isset(self::$tickets[$ticket])) {
throw new InvalidArgumentException('Bad ticket number.');
}
list($connection, $event, $sql, $time) = self::$tickets[$ticket];
parent::after($ticket, $res);
if (($event & self::QUERY) && (count(self::$fireTable) < self::$maxQueries) && (class_exists('FireLogger', false) && $this->useFirebug)) {
for ($i = self::$flogCnt++; $i < count(self::$fireTable); $i++) {
$row = & self::$fireTable[$i];
if ($row[0] >= 100) {
$lvl = 'critical';
} elseif ($row[0] >= 15) {
$lvl = 'warning';
} else {
$lvl = 'info';
}
FireLogger::$default->log($lvl, $row[1]);
FireLogger::$default->log($lvl, "-- Time:$row[0] Rows:$row[2] Connection:$row[3]");
}
}
}
}
Editoval Milo (13. 12. 2011 20:45)