sfErrorNotifierPlugin по заданию symfony

Мое приложение запускает огромную пакетную обработку внутри задачи Symfony, и я хочу получать уведомления обо всех ошибках PHP и неперехваченных исключениях.

Поэтому я попробовал sfErrorNotifierPlugin, и он отлично работает в веб-контексте (доступ к приложению из браузера); проблема в том, что я не могу заставить ее работать над моими задачами symfony.

Есть ли способ заставить его работать в задачах?

sfTask не имеет обработки исключений, как это делает веб-интерфейс, но вы можете обойти его: в конечном итоге исключенные исключения передаются в sfErrorNotifier::notifyException .

Оберните метод execute своей задачи в большом блоке try-catch:

 public function execute($arguments = array(), $options = array()) { try { //your code here } catch(Exception $e) { sfErrorNotifier::notifyException($e); //call the notifier throw $e; //rethrow to stop execution and to avoid problems in some special cases } } 

Имейте в виду, что для правильной работы приложения требуется параметр приложения (использует настройки из app.yml).

в ProjectConfiguration.class.php

 public function setup() { if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin'); } 

Спасибо за вашу помощь @Maerlyn, мое решение не сильно отличается от вашего.

Я решил проблему переопределения метода doRun для моих задач таким образом:

 protected function doRun(sfCommandManager $commandManager, $options) { try { return parent::doRun($commandManager, $options); } catch (Exception $e) { $this->dispatcher->notifyUntil(new sfEvent($e, 'application.throw_exception')); throw $e; } } 

Это решает проблему.