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

Другие вопросы по тегам