added a configuraiton to allow the profiler to be enabled only when an exception occurs

This commit is contained in:
Fabien Potencier 2010-08-31 22:22:31 +02:00
parent 1e1a4113c7
commit 60ea1eef69
3 changed files with 17 additions and 2 deletions

View File

@ -81,6 +81,12 @@ class WebExtension extends Extension
$loader->load('profiling.xml');
$loader->load('collectors.xml');
}
if (isset($config['profiler']['only-exceptions'])) {
$container->setParameter('profiler_listener.only_exceptions', $config['profiler']['only-exceptions']);
} elseif (isset($config['profiler']['only_exceptions'])) {
$container->setParameter('profiler_listener.only_exceptions', $config['profiler']['only_exceptions']);
}
} elseif ($container->hasDefinition('profiler')) {
$container->getDefinition('profiling')->clearTags();
}

View File

@ -10,6 +10,7 @@
<parameter key="profiler.storage.file">%kernel.cache_dir%/profiler.db</parameter>
<parameter key="profiler.storage.lifetime">86400</parameter>
<parameter key="profiler_listener.class">Symfony\Component\HttpKernel\Profiler\ProfilerListener</parameter>
<parameter key="profiler_listener.only_exceptions">false</parameter>
</parameters>
<services>
@ -27,6 +28,7 @@
<service id="profiler_listener" class="%profiler_listener.class%">
<tag name="kernel.listener" />
<argument type="service" id="profiler" />
<argument>%profiler_listener.only_exceptions%</argument>
</service>
</services>
</container>

View File

@ -25,15 +25,18 @@ class ProfilerListener
{
protected $profiler;
protected $exception;
protected $onlyException;
/**
* Constructor.
*
* @param Profiler $profiler A Profiler instance
* @param Profiler $profiler A Profiler instance
* @param Boolean $onlyException true if the profiler only collects data when an exception occurs, false otherwise
*/
public function __construct(Profiler $profiler)
public function __construct(Profiler $profiler, $onlyException = false)
{
$this->profiler = $profiler;
$this->onlyException = $onlyException;
}
/**
@ -77,6 +80,10 @@ class ProfilerListener
return $response;
}
if ($this->onlyException && null === $this->exception) {
return $response;
}
$this->profiler->collect($event->getParameter('request'), $response, $this->exception);
$this->exception = null;