Laravel Telescope

Laravel Telescope 是一個全面監控的 debug 助理,是由 Laravel 開發團隊所推出的一項功能,支援 Laravel 5.7.7 以上的版本。

其中包括以下的項目都包含在 watcher :

  • Requests
  • Commands
  • Schedule
  • Jobs
  • Exceptions
  • Logs
  • Dumps
  • Queries
  • Models
  • Events
  • Mail
  • Notifications
  • Cache
  • Redis

安裝 Telescope

# 直接安裝方式
composer require laravel/telescope

# 建議方式,只在 dev 環境使用
composer require laravel/telescope --dev

接著安裝telescope 及 migrate

php artisan telescope:install

php artisan migrate

如果後續有 Telescope 需要更新時,可以重新執行 publish

php artisan telescope:publish

完成以上安裝後,可以直接訪問 /telescope

關於 Telescope 設定檔位於 config/telescope.php,可以直接在這裡面修改預設 path

<?php
    /*
    |--------------------------------------------------------------------------
    | Telescope Path
    |--------------------------------------------------------------------------
    |
    | This is the URI path where Telescope will be accessible from. Feel free
    | to change this path to anything you like. Note that the URI will not
    | affect the paths of its internal API that aren't exposed to users.
    |
    */

    'path' => 'telescope',

關於設定檔裡的參數,簡述如下:

driver - 不能變更,database 是唯一支援的項目

storage - 預設會套用在 .env 所設定的資料庫連線方式

安全性

在本地端,預設安裝及執行後,可以直接從路徑直接訪問後台

在官網建議如果需要設置管控名單,可以透過 provider 設定方式來指定允許人員:

開啟 app/Providers/TelescopeServiceProvider.php ,必且將 gate 設定允許訪問的名單,例如:

protected function gate()
{
    Gate::define('viewTelescope', function ($user) {
        return in_array($user->email, [
            'taylor@laravel.com',
        ]);
    });
}

在實際應用時,會建議把設置以環境變數的方式處理,並且修改為用戶 id 辨識的方式,會更加的優雅

例如:

protected function gate()
{
    Gate::define('viewTelescope', function ($user) {
		$userId = explode(',' env('TELESCOPE_USERS'));
		return in_array($user->id, $userId);
    });
}

接著在環境變數配置,例如:

TELESCOPE_USERS=1,3,6

數據修整

依照官方建議,若無特別原因需要保留過久的紀錄,建議執行每日資料清除的方式,避免資料增長太快

清除方式可直接透過設定 schedule 方式,每天執行 telescope:prune 命令的方式,來重整數據:

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

或者,可以透過 –hours option 來指定超過多少小時的資料,要被清除

例如,超過 48 hr 的資料才會被執行清除

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