CakePHP:控制台命令中的自定义错误报告

时间:2014-05-13 15:26:09

标签: php cakephp error-handling

我们目前正在使用CakePHP 2.4.7和自定义错误处理程序。自定义错误处理程序适用于通过HTTP或通过CronDispatcher进行的每个请求。

不幸的是,在向我们的某个控制台命令发出控制台请求时,将忽略错误处理程序。

请参阅以下示例:

core.php中:

App::uses('SentryErrorHandler', 'Sentry.Lib');

Configure::write('Sentry', array(
  //'production_only' => true, // true is default value -> no error in sentry when debug
  'PHP' => array(
    'server' => 'https://XXX:YYY@app.getsentry.com/1234'
  )
));

Configure::write('Error', array(
  'handler' => 'SentryErrorHandler::handleError',
  'level' => E_ALL & ~E_DEPRECATED,
  'trace' => true
));

Configure::write('Exception', array(
  'handler' => 'SentryErrorHandler::handleException',
  'renderer' => 'ExceptionRenderer',
  'log' => true
));

XYController.php / XYShell.php:

function test() {
  die(pr([]['test']));
}

在这两种情况下,都会抛出正确的错误:

PHP Parse error:  syntax error, unexpected '[' in /vagrant/htdocs/app/Console/Command/XYShell.php on line 50

Parse error: syntax error, unexpected '[' in /vagrant/htdocs/app/Console/Command/XYShell.php on line 50
Fatal Error Error: syntax error, unexpected '[' in [/vagrant/htdocs/app/Console/Command/XYShell.php, line 50]

但是当通过./cake XY测试调用上述方法时,看起来错误没有正确传播到自定义错误处理程序。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

控制台和网络不使用相同的配置

异常和错误配置有separate options标准异常和错误配置:

  

consoleHandler - callback - 用于在控制台中运行时处理错误的回调。如果未定义,将使用CakePHP的默认处理程序。

这也很明显from the source

因此,要配置用于 web和cli请求的不同处理程序 - 定义handlerconsoleHandler键:

Configure::write('Error', array(
  'handler' => 'SentryErrorHandler::handleError',
  'consoleHandler' => 'SentryErrorHandler::handleError', # <--
  'level' => E_ALL & ~E_DEPRECATED,
  'trace' => true
));

Configure::write('Exception', array(
  'handler' => 'SentryErrorHandler::handleException',
  'consoleHandler' => 'SentryErrorHandler::handleException', # <--
  'renderer' => 'ExceptionRenderer',
  'log' => true
));