CakePHP: пользовательская отчетность об ошибках в командах консоли

мы в настоящее время используем 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, похоже, что ошибка неправильно передается в пользовательский обработчик ошибок.

Я что-то упускаю?

Консоль и сеть не используют одну и ту же конфигурацию

Конфигурация «Исключение и ошибка» имеет отдельные опции для стандартной конфигурации исключения и ошибок:

consoleHandler – callback – обратный вызов, используемый для обработки ошибок при запуске в консоли. Если undefined, будут использоваться обработчики по умолчанию CakePHP.

Это также видно из источника .

Как таковой для настройки другого обработчика, который будет использоваться как для веб-запросов, так и для consoleHandler – определить как handler и ключи consoleHandler :

 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 ));