在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

回到顶部