How can PHP developers implement a wrapper around their DB interface to capture and log executed queries in a more structured manner?

PHP developers can implement a wrapper around their DB interface by creating a class that extends the existing database connection class and overrides the query execution methods. Within these overridden methods, developers can capture the executed queries and log them in a structured manner, such as storing them in a log file or database table. This approach allows for easier debugging, monitoring, and analysis of database interactions in the application.

class LoggedDBConnection extends OriginalDBConnection {
    public function query($sql) {
        // Log the executed query
        $this->logQuery($sql);

        // Call the parent method to execute the query
        return parent::query($sql);
    }

    public function prepare($sql) {
        // Log the prepared query
        $this->logQuery($sql);

        // Call the parent method to prepare the query
        return parent::prepare($sql);
    }

    private function logQuery($sql) {
        // Log the query in a structured manner, e.g., write to a log file or database table
        $logMessage = date('Y-m-d H:i:s') . ' - Executed query: ' . $sql . PHP_EOL;
        file_put_contents('query_log.txt', $logMessage, FILE_APPEND);
    }
}

// Implementation example
$db = new LoggedDBConnection('localhost', 'username', 'password', 'database');
$result = $db->query('SELECT * FROM users');