Better logging of SQL queries in Doctrine DBAL for Symfony.
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Open a command console, enter your project directory and execute:
$ composer require halloverden/symfony-doctrine-sql-logger-bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require halloverden/symfony-doctrine-sql-logger-bundle
Then, enable the bundle by adding it to the list of registered bundles
in the config/bundles.php
file of your project:
// config/bundles.php
return [
// ...
HalloVerden\DoctrineSqlLoggerBundle\HalloVerdenDoctrineSqlLoggerBundle::class => ['all' => true],
];
By default, all you have to do is require this bundle and it wil log query execution time on the default connection for all queries that takes more than 100 ms.
hallo_verden_doctrine_sql_logger:
loggers:
- connection: default
threshold: 100
paramsLog: false
backtraceLog: false
logger: logger
Before executing a query you can change the context by injecting QueryExecutionTimeLoggerInterface
and add a context:
readonly class MyRepository {
public function __construct(
private QueryExecutionTimeLoggerInterface $queryExecutionTimeLogger
) {
}
public function executeQuery(): User {
$this->queryExecutionTimeLogger->addContext(new QueryExecutionTimeContext(threshold: 500));
// ... Execute query
}
}
If more than one logger is defined you can inject the correct logger by prefixing the variable name with the connection name.
For example $myConnectionQueryExecutionTimeLogger
When a query exceeds the threshold a QueryExecutionTimeEvent
is dispatched.
Keep in mind that any query executed within this event will not be timed and logged.