мы в настоящее время используем 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 ));