Вступление

Laravel Telescope - элегантный помощник для отладки каркаса Laravel. Телескоп обеспечивает понимание запросов, поступающих в ваше приложение, исключений, записей журнала, запросов к базе данных, заданий в очереди, почты, уведомлений, операций кэширования, запланированных задач, дампов переменных и многого другого. Телескоп - прекрасный компаньон для вашей локальной среды разработки Laravel.

 

Установка

Вы можете использовать Composer для установки Telescope в ваш проект Laravel:

composer require laravel/telescope

После установки Telescope опубликуйте его ресурсы с помощью команды Artisan. После установки Telescope вы также должны выполнить команду:telescope:installmigrate

php artisan telescope:install

php artisan migrate

Обновление телескопа

При обновлении Telescope вы должны повторно опубликовать ресурсы Telescope:

php artisan telescope:publish

Установка только в определенных средах

Если вы планируете использовать только Telescope для локальной разработки, вы можете установить Telescope, используя --devфлаг:

composer require laravel/telescope --dev

После запуска вы должны удалить регистрацию поставщика услуг из вашего файла конфигурации. Вместо этого вручную зарегистрируйте поставщика услуг следующим способом :telescope:installTelescopeServiceProviderappregisterAppServiceProvider

use App\Providers\TelescopeServiceProvider;

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    if ($this->app->isLocal()) {
        $this->app->register(TelescopeServiceProvider::class);
    }
}

 

Настройка миграции

Если вы не собираетесь использовать миграции Telescope по умолчанию, вам следует вызвать метод в вашем методе . Вы можете экспортировать миграции по умолчанию с помощью команды.Telescope::ignoreMigrationsregisterAppServiceProviderphp artisan vendor:publish --tag=telescope-migrations

Конфигурация

После публикации ресурсов Telescope его основной файл конфигурации будет находиться по адресу . Этот файл конфигурации позволяет вам настроить параметры наблюдателя, и каждый параметр конфигурации содержит описание его назначения, поэтому обязательно внимательно изучите этот файл.config/telescope.php

При желании вы можете полностью отключить сбор данных телескопа, используя enabledопцию конфигурации:

'enabled' => env('TELESCOPE_ENABLED', true),

 

Обрезка данных

Без сокращения telescope_entriesтаблица может накапливать записи очень быстро. Чтобы смягчить это, вы должны запланировать ежедневное выполнение команды Artisan:telescope:prune

$schedule->command('telescope:prune')->daily();

По умолчанию все записи старше 24 часов будут удалены. Вы можете использовать эту hoursопцию при вызове команды, чтобы определить, как долго хранить данные телескопа. Например, следующая команда удалит все записи, созданные более 48 часов назад:

$schedule->command('telescope:prune --hours=48')->daily();

 

Авторизация панели инструментов

Телескоп выставляет приборную панель на /telescope. По умолчанию вы сможете получить доступ к этой панели только в этой localсреде. В вашем файле есть метод. Этот шлюз авторизации контролирует доступ к телескопу в нелокальных средах. Вы можете изменять эти ворота по мере необходимости, чтобы ограничить доступ к установке вашего телескопа:app/Providers/TelescopeServiceProvider.phpgate

/**
 * Register the Telescope gate.
 *
 * This gate determines who can access Telescope in non-local environments.
 *
 * @return void
 */
protected function gate()
{
    Gate::define('viewTelescope', function ($user) {
        return in_array($user->email, [
            'taylor@laravel.com',
        ]);
    });
}

 

Фильтрация

Записи

Вы можете фильтровать данные, которые записаны телескопом через filterобратный вызов, который зарегистрирован в вашем TelescopeServiceProvider. По умолчанию этот обратный вызов записывает все данные в localсреде и исключения, сбойные задания, запланированные задачи и данные с отслеживаемыми тегами во всех других средах:

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->hideSensitiveRequestDetails();

    Telescope::filter(function (IncomingEntry $entry) {
        if ($this->app->isLocal()) {
            return true;
        }

        return $entry->isReportableException() ||
            $entry->isFailedJob() ||
            $entry->isScheduledTask() ||
            $entry->hasMonitoredTag();
    });
}

 

Порции

Хотя filterобратный вызов фильтрует данные для отдельных записей, вы можете использовать filterBatchметод для регистрации обратного вызова, который фильтрует все данные для данного запроса или консольной команды. Если обратный вызов возвращается true, все записи записываются телескопом:

use Illuminate\Support\Collection;

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->hideSensitiveRequestDetails();

    Telescope::filterBatch(function (Collection $entries) {
        if ($this->app->isLocal()) {
            return true;
        }

        return $entries->contains(function ($entry) {
            return $entry->isReportableException() ||
                $entry->isFailedJob() ||
                $entry->isScheduledTask() ||
                $entry->hasMonitoredTag();
            });
    });
}

 

Tagging

Телескоп позволяет искать записи по «тегу». Зачастую тегами являются имена классов Eloquent модели или идентифицированные идентификаторы пользователей, которые Telescope автоматически добавляет к записям. Иногда вы можете прикрепить свои собственные теги к записям. Для этого вы можете использовать метод. Метод принимает функцию обратного вызова , который должен возвращать массив тегов. Теги, возвращаемые обратным вызовом, будут объединены с любыми тегами, которые телескоп автоматически прикрепит к записи. Вы должны вызвать метод в вашем :Telescope::tagstagstagsTelescopeServiceProvider

use Laravel\Telescope\Telescope;

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    $this->hideSensitiveRequestDetails();

    Telescope::tags(function (IncomingEntry $entry) {
        if ($entry->type === 'request') {
            return ['status:'.$entry->content['response_status']];
        }

        return [];
    });
 }

 

Доступные наблюдатели

Наблюдатели телескопа собирают данные приложения при выполнении запроса или консольной команды. Вы можете настроить список наблюдателей, которые вы хотели бы включить в свой файл конфигурации:config/telescope.php

'watchers' => [
    Watchers\CacheWatcher::class => true,
    Watchers\CommandWatcher::class => true,
    ...
],

Некоторые наблюдатели также позволяют предоставлять дополнительные параметры настройки:

'watchers' => [
    Watchers\QueryWatcher::class => [
        'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
        'slow' => 100,
    ],
    ...
],

 

Cache Watcher

Наблюдатель кеша записывает данные, когда ключ кеша удаляется, пропускается, обновляется и забывается.

Командный Наблюдатель

Наблюдатель команд записывает аргументы, параметры, код выхода и выходные данные при каждом выполнении команды Artisan. Если вы хотите исключить определенные команды от записи наблюдателем, вы можете указать команду в ignoreопции в вашем файле:config/telescope.php

'watchers' => [
    Watchers\CommandWatcher::class => [
        'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
        'ignore' => ['key:generate'],
    ],
    ...
],

 

Дамп Наблюдатель

Наблюдатель дампов записывает и отображает ваши переменные дампы в Telescope. При использовании Laravel переменные могут быть сброшены с помощью глобальной dumpфункции. Вкладка наблюдателя дампов должна быть открыта в браузере, чтобы запись происходила, иначе наблюдатели будут игнорировать дампы.

 

Наблюдатель за событиями

Наблюдатель событий записывает полезную нагрузку, прослушиватели и широковещательные данные для любых событий, отправляемых вашим приложением. Внутренние события фреймворка Laravel игнорируются наблюдателем событий.

 

Наблюдатель за исключениями

Наблюдатель исключений записывает данные и трассировку стека для любых регистрируемых исключений, которые выдает ваше приложение.

 

Gate Watcher

Наблюдатель от шлюза записывает данные и результаты проверок шлюза и политики вашим приложением. Если вы хотите исключить определенные способности от записи наблюдателем, вы можете указать их в ignore_abilitiesопции в вашем файле:config/telescope.php

'watchers' => [
    Watchers\GateWatcher::class => [
        'enabled' => env('TELESCOPE_GATE_WATCHER', true),
        'ignore_abilities' => ['viewNova'],
    ],
    ...
],

 

Наблюдатель за работой

Наблюдатель за работой записывает данные и состояние всех заданий, отправленных вашим приложением.

 

Log Watcher

Наблюдатель журналов записывает данные журналов для любых журналов, написанных вашим приложением.

 

Наблюдатель почты

Наблюдатель за электронной почтой позволяет просматривать предварительный просмотр электронных писем в браузере вместе с соответствующими данными. Вы также можете скачать письмо в виде .emlфайла.

 

Модель Watcher

Модель Watcher записи модель меняется всякий раз , когда Красноречивыми createdupdatedrestoredили deletedотправляется событие. Вы можете указать, какие события модели должны быть записаны с помощью eventsопции наблюдателя :

'watchers' => [
    Watchers\ModelWatcher::class => [
        'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
        'events' => ['eloquent.created*', 'eloquent.updated*'],
    ],
    ...
],

 

Наблюдатель уведомлений

Наблюдатель уведомлений записывает все уведомления, отправленные вашим приложением. Если уведомление вызывает сообщение электронной почты, и у вас включен наблюдатель за электронной почтой, сообщение также будет доступно для предварительного просмотра на экране наблюдателя за электронной почтой.

 

Query Watcher

Наблюдатель запросов записывает необработанный SQL, привязки и время выполнения для всех запросов, которые выполняются вашим приложением. Наблюдатель также помечает любые запросы медленнее, чем 100 мс slow. Вы можете настроить медленный порог запроса, используя slowопцию наблюдателя :

'watchers' => [
    Watchers\QueryWatcher::class => [
        'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
        'slow' => 50,
    ],
    ...
],

 

Redis Watcher

События Redis должны быть включены, чтобы наблюдатель Redis работал. Вы можете включить событие Redis путем вызова в методе вашего файла.Redis::enableEvents()bootapp/Providers/AppServiceProvider.php

Наблюдатель Redis записывает все команды Redis, выполненные вашим приложением. Если вы используете Redis для кэширования, команды кэширования также будут записываться Redis Watcher.

 

Запрос наблюдателя

Наблюдатель запросов записывает данные запроса, заголовков, сеанса и ответа, связанные с любыми запросами, обрабатываемыми приложением. Вы можете ограничить свои данные ответа с помощью size_limitопции (в КБ):

'watchers' => [
    Watchers\RequestWatcher::class => [
        'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
        'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
    ],
    ...
],

 

Расписание Watcher

Наблюдатель расписания записывает команды и выходные данные любых запланированных задач, выполняемых вашим приложением.