diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index b3e05944d..5f7efeca6 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -143,6 +143,7 @@ private function getDbalConnectionsNode() ->scalarNode('schema_filter')->end() ->booleanNode('logging')->defaultValue($this->debug)->end() ->booleanNode('profiling')->defaultValue($this->debug)->end() + ->booleanNode('profiling_backtrace')->defaultValue(false)->end() ->scalarNode('server_version')->end() ->scalarNode('driver_class')->end() ->scalarNode('wrapper_class')->end() diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index 75fde439e..5481cb2d1 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -132,9 +132,16 @@ protected function loadDbalConnection($name, array $connection, ContainerBuilder $logger = new Reference('doctrine.dbal.logger'); } unset($connection['logging']); - if ($connection['profiling']) { - $profilingLoggerId = 'doctrine.dbal.logger.profiling.' . $name; - $container->setDefinition($profilingLoggerId, new ChildDefinition('doctrine.dbal.logger.profiling')); + + if ($connection['profiling'] || $connection['profiling_backtrace']) { + if ($connection['profiling_backtrace']) { + $profilingAbstractId = 'doctrine.dbal.logger.backtrace'; + } else { + $profilingAbstractId = 'doctrine.dbal.logger.profiling'; + } + + $profilingLoggerId = $profilingAbstractId . '.' . $name; + $container->setDefinition($profilingLoggerId, new ChildDefinition($profilingAbstractId)); $profilingLogger = new Reference($profilingLoggerId); $container->getDefinition('data_collector.doctrine')->addMethodCall('addLogger', [$name, $profilingLogger]); @@ -149,7 +156,7 @@ protected function loadDbalConnection($name, array $connection, ContainerBuilder $logger = $profilingLogger; } } - unset($connection['profiling']); + unset($connection['profiling'], $connection['profiling_backtrace']); if (isset($connection['auto_commit'])) { $configuration->addMethodCall('setAutoCommit', [$connection['auto_commit']]); diff --git a/Resources/config/dbal.xml b/Resources/config/dbal.xml index d0f2a868b..af3a92efb 100644 --- a/Resources/config/dbal.xml +++ b/Resources/config/dbal.xml @@ -7,6 +7,7 @@ Doctrine\DBAL\Logging\LoggerChain Doctrine\DBAL\Logging\DebugStack + Doctrine\DBAL\Logging\BacktraceLogger Symfony\Bridge\Doctrine\Logger\DbalLogger Doctrine\DBAL\Configuration Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector @@ -30,6 +31,7 @@ + diff --git a/Resources/views/Collector/db.html.twig b/Resources/views/Collector/db.html.twig index 4cfb9a012..3984c19ca 100644 --- a/Resources/views/Collector/db.html.twig +++ b/Resources/views/Collector/db.html.twig @@ -148,7 +148,7 @@ {% if profiler_markup_version > 1 %}

Query Metrics

- +
{{ collector.querycount }} @@ -159,17 +159,17 @@ {{ collector.groupedQueryCount }} Different statements
- +
{{ '%0.2f'|format(collector.time * 1000) }} ms Query time
- +
{{ collector.invalidEntityCount }} Invalid entities
- + {% if collector.cacheEnabled %}
{{ collector.cacheHitsCount }} @@ -254,6 +254,11 @@    Explain query {% endif %} + + {% if query.backtrace is defined %} +    + View query backtrace + {% endif %}