Пользовательский обработчик ошибок и исключений для команды Artisan
Я пытаюсь отправить ошибки и исключения в raygun.io из команды ремесленника Laravel 4, но Laravel, похоже, имеет свой собственный обработчик исключений.
Есть ли способ указать собственный метод в моей команде? В настоящее время я пытаюсь указать пользовательский обработчик для ошибок и исключений следующим образом:
<?php
class ParseCommand extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'my:parse';
protected $descriptino = '...';
protected $raygun = null;
/**
* __construct
*/
public function __construct()
{
parent::__construct();
// Setup custom error and exception handlers
$raygun_api_key = \Config::get('tms.raygun_api_key');
$this->raygun = new RaygunClient("MUzf+furi8E9tffcHAaJVw==");
set_exception_handler([$this, 'exceptionHandler']);
set_error_handler([$this, 'errorHandler']);
}
/**
* Custom exception handler.
*
* @param $exception
*/
public function exceptionHandler($exception)
{
$this->raygun->SendException($exception);
}
/**
* Custom error handler.
*
* @param $errno
* @param $errstr
* @param $errfile
* @param $errline
*/
public function errorHandler($errno, $errstr, $errfile, $errline)
{
$this->raygun->SendError($errno, $errstr, $errfile, $errline);
}
/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
$start_time = microtime(true);
throw new \Exception("Oopsie!");
// Omitted for brevity...
}
}
Конечно, обработчики никогда не выполняются, так как Artisan захватывает их с помощью собственной пользовательской реализации.
1 ответ
Файлы в папке app/start
выполняются только при загрузке платформы Laravel, когда запускается соответствующая среда. Это означает, что app/start/local.php
запускается, когда среда равна local
а также app/start/staging.php
запускается, когда среда равна staging
, Так же app/start/global.php
файл запускается каждый раз и app/start/artisan.php
выполняется на каждом ремесленном исполнении.
Из документации: http://laravel.com/docs/errors разместить обработчик
App::error(function(Exception $exception)
{
Log::error($exception);
});
в app/start/artisan
для ваших обработчиков исключений только для ремесленников.