Kotchasan Framework Documentation

Kotchasan Framework Documentation

Kotchasan\Logger\QueryLogger

TH 05 Feb 2026 07:40

Kotchasan\Logger\QueryLogger

QueryLogger เป็น logger เฉพาะสำหรับบันทึก database queries พร้อมติดตามเวลาการทำงาน

การใช้งาน

use Kotchasan\Logger\QueryLogger;
use Kotchasan\Logger\FileLogger;

// สร้าง QueryLogger พร้อม FileLogger
$fileLogger = new FileLogger('queries.log');
$queryLogger = new QueryLogger($fileLogger, true); // true = track time

// บันทึก query
$startTime = $queryLogger->logQuery('SELECT * FROM users WHERE id = ?', [1]);

// ... execute query ...

$queryLogger->logQueryResult(
    'SELECT * FROM users WHERE id = ?',
    [1],
    $startTime,
    10  // affected rows
);

Constructor

public function __construct(LoggerInterface $logger, bool $trackTime = true)

Parameters:

  • $logger - Logger instance สำหรับเขียน log
  • $trackTime - ติดตามเวลาการทำงาน (default: true)

เมธอดหลัก

logQuery()

บันทึก query ก่อน execute

public function logQuery(string $query, array $bindings = []): ?float

Returns: Start time (ถ้า trackTime = true)

logQueryResult()

บันทึกผลลัพธ์หลัง execute

public function logQueryResult(
    string $query,
    array $bindings,
    ?float $startTime,
    int $rowCount
): void

logQueryError()

บันทึก error

public function logQueryError(string $query, array $bindings, string $error): void

getQueries() / getQueryCount()

ดึงรายการ queries ที่ execute

public function getQueries(): array
public function getQueryCount(): int

getTotalTime() / getAverageTime()

ดึงเวลาการทำงาน

public function getTotalTime(): float    // รวมทั้งหมด (วินาที)
public function getAverageTime(): float  // เฉลี่ย (วินาที)

ตัวอย่าง

Debug Panel

use Kotchasan\Logger\QueryLogger;
use Kotchasan\Logger\ConsoleLogger;

$queryLogger = new QueryLogger(new ConsoleLogger());

// After processing...
echo "Query Statistics:\n";
echo "Total Queries: " . $queryLogger->getQueryCount() . "\n";
echo "Total Time: " . number_format($queryLogger->getTotalTime() * 1000, 2) . "ms\n";
echo "Average Time: " . number_format($queryLogger->getAverageTime() * 1000, 2) . "ms\n";

foreach ($queryLogger->getQueries() as $i => $query) {
    echo "\n{$i}. {$query['query']}\n";
    if ($query['time']) {
        echo "   Time: " . number_format($query['time'] * 1000, 2) . "ms\n";
    }
}

คลาสที่เกี่ยวข้อง