在Symfony2中捕获数据库异常
我有一个随机问题,我无法缩小范围。偶尔,我会得到下面的错误在Symfony2中的应用:在Symfony2中捕获数据库异常
未捕获的异常:在驱动程序时发生异常:SQLSTATE [08004] [1040]连接太多{ “类型”:1, “文件”:” /var/www/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php","line":115,"level":30709
我想建立一个应用程序广泛收听PDOException
并记录一些信息。我如何才能钩入Symfony才能赶上PDOException
?
回答:
您需要创建自定义异常监听。它会监听所有的异常,但你会在其中指定类型检查。
在你services.yml
需要指定监听器:
kernel.listener.your_pdo_listener: class: Acme\AppBundle\EventListener\YourExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onPdoException }
现在,你需要创建这个类:
YourExceptionListener:
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; class YourExceptionListener
{
public function onPdoException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
if ($exception instanceof PDOException) {
//now you can do whatever you want with this exception
}
}
}
检查文档how to create event listener
回答:
定义这样的服务:
<service id="app.listener.kernel.exception" class="MyAppBundle\Listener\KernelExceptionListener">
<tag name="kernel.event_listener" event="kernel.exception" method="onKernelException"/>
<argument type="service" id="logger"/>
</service>
和A类是这样的:
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; class KernelExceptionListener
{
private $logger;
public function __construct(Monolog\Logger $logger)
{
$this->logger = $logger;
}
public function onKernelException(GetResponseForExceptionEvent $event)
{
// Here check the exception
//$event->getException()
}
}
以上是 在Symfony2中捕获数据库异常 的全部内容, 来源链接: utcz.com/qa/261026.html