1

我的应用程序在 Symfony 任务中运行大量批处理,我希望收到有关所有 PHP 错误和未捕获异常的通知。

所以我尝试了 sfErrorNotifierPlugin,它在 Web 环境中运行良好(从浏览器访问应用程序);问题是我不能让它在我的 symfony 任务上工作。

有没有办法让它在任务中工作?

4

3 回答 3

4

在 ProjectConfiguration.class.php

public function setup()
  {
    if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
  }
于 2012-11-02T17:31:48.183 回答
3

sfTask没有像 web 界面那样的异常处理,但你可以解决它:最终抛出的异常被传递给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 中的设置)。

于 2011-05-11T13:53:49.360 回答
0

感谢您的帮助@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;
    }
  }

这解决了问题。

于 2011-05-19T09:29:14.883 回答