tourze / doctrine-logger-bundle
Doctrine Logger Bundle
Requires
- php: ^8.1
- ext-mbstring: *
- doctrine/dbal: ^4.0
- doctrine/doctrine-bundle: ^2.13
- doctrine/orm: ^2.20 || ^3.0
- psr/log: ^3|^2|^1
- symfony/config: ^6.4
- symfony/dependency-injection: ^6.4
- symfony/doctrine-bridge: ^6.4
- symfony/framework-bundle: ^6.4
- symfony/http-kernel: ^6.4
- symfony/service-contracts: ^3.5
- symfony/stopwatch: ^6.4
- symfony/yaml: ^6.4 || ^7.1
- tourze/backtrace-helper: ~0.0.5
- yiisoft/strings: ^2.1
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.0
README
A Symfony bundle that provides enhanced logging capabilities for Doctrine ORM queries, with a focus on performance monitoring and debugging.
Features
- Monitors SQL query execution time
- Logs queries that exceed configurable time thresholds
- Provides detailed backtrace information for slow queries
- Normalizes and truncates query parameters for better log readability
- Integrates with Symfony's Stopwatch component for precise timing
- Compatible with PSR-3 loggers
Installation
composer require tourze/doctrine-logger-bundle
Configuration
The bundle works with minimal configuration. After installation, add it to your bundles in config/bundles.php
:
<?php return [ // ... Tourze\DoctrineLoggerBundle\DoctrineLoggerBundle::class => ['all' => true], ];
Environment Variables
You can configure the bundle using the following environment variables:
SQL_LOG_LENGTH
: Maximum length of SQL queries in logs (default: 1000)LOG_DB_QUERY_BACKTRACE
: Enable backtrace logging for all queries (default: false)
Usage
The bundle automatically registers the QueryExecutionTimeLogger
service which monitors Doctrine queries. By default, it logs:
- All queries in development environment
- Only slow queries (exceeding threshold) in production environment
Basic Example
<?php use Tourze\DoctrineLoggerBundle\Service\QueryExecutionTimeLogger; class MyService { public function __construct( private QueryExecutionTimeLogger $queryLogger ) {} public function executeCustomQuery(string $sql, array $params): mixed { return $this->queryLogger->watch( 'my_custom_query', $sql, $params, function() use ($sql, $params) { // Execute your query here // For example: // return $this->connection->executeQuery($sql, $params)->fetchAllAssociative(); } ); } }
How It Works
The bundle uses Symfony's Stopwatch component to measure query execution time. When a query exceeds the configured threshold (default: 1000ms), it logs detailed information including:
- The SQL query
- Query parameters (normalized and truncated for readability)
- Execution time
- Backtrace information (if enabled)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This bundle is available under the MIT license. See the LICENSE file for more information.