Используйте Doctrine SQLLogger в TYPO3 Backend для записи всех выполненных SQL-запросов. - PullRequest
0 голосов
/ 14 июня 2019

Мы сталкиваемся с очень длительным временем загрузки для просмотра списка записей на многих страницах. Чтобы понять, что является причиной этого, мы хотим проанализировать выполненные SQL-запросы. (В конечном счете, нам может потребоваться админ-панель для бэкенда).

Теоретически, Doctrine DBAL поддерживает перехват SQLLogger, но мы не знаем, где будет замена / внедрение класса для этого.

Мы нашли возможность исправления файла typo3/cms/typo3/sysext/core/Classes/Database/Connection.php и просто создали новый метод, перезаписывающий родительский файл:

 /**
 * Debug all the things
 *
 * If the query is parametrized, a prepared statement is used.
 * If an SQLLogger is configured, the execution is logged.
 *
 * @param string                                      $query  The SQL query to execute.
 * @param array                                       $params The parameters to bind to the query, if any.
 * @param array                                       $types  The types the previous parameters are in.
 * @param \Doctrine\DBAL\Cache\QueryCacheProfile|null $qcp    The query cache profile, optional.
 *
 * @return \Doctrine\DBAL\Driver\Statement The executed statement.
 *
 * @throws \Doctrine\DBAL\DBALException
 */
public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null) {
    $fp = fopen('/var/www/html/logs/mysql.log', 'a'); fwrite($fp, '[QUERY-DOCTRINE] ' . $query . "\n"); fclose($fp);

    return parent::executeQuery($query, $params, $types, $qcp);
}

Но этот подход на самом деле не переносим и требует исправления созданных композитором файлов поставщиков. Кроме того, ему не хватает правильной необработанной регистрации и способностей сложных SQLLoggers. Так что где-нибудь мы сможем вызвать методы класса Doctrine Configuration?

...