Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 5 měsíci

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Logování SQL dotazů do FireLoggeru

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)

 

Zápatí