我的应用程序在 Symfony 任务中运行大量批处理,我希望收到有关所有 PHP 错误和未捕获异常的通知。
所以我尝试了 sfErrorNotifierPlugin,它在 Web 环境中运行良好(从浏览器访问应用程序);问题是我不能让它在我的 symfony 任务上工作。
有没有办法让它在任务中工作?
我的应用程序在 Symfony 任务中运行大量批处理,我希望收到有关所有 PHP 错误和未捕获异常的通知。
所以我尝试了 sfErrorNotifierPlugin,它在 Web 环境中运行良好(从浏览器访问应用程序);问题是我不能让它在我的 symfony 任务上工作。
有没有办法让它在任务中工作?
在 ProjectConfiguration.class.php
public function setup()
{
if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
}
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 中的设置)。
感谢您的帮助@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;
}
}
这解决了问题。