08/12/2019, 00:24

Laravel debugging tools

Vào một ngày đẹp trời, tự nhiên đứa bên cạnh hỏi mình cách debug ứng dụng Laravel viết API, không có phần view? Lúc đó mình chưa biết xử lý như thế nào (haiz). Vì vậy bài viết sẽ tập hợp lại một số tools hỗ trợ debug cho ứng dụng Laravel khi dùng với ứng dụng API và dùng với ứng dụng web có front ...

Vào một ngày đẹp trời, tự nhiên đứa bên cạnh hỏi mình cách debug ứng dụng Laravel viết API, không có phần view? Lúc đó mình chưa biết xử lý như thế nào (haiz). Vì vậy bài viết sẽ tập hợp lại một số tools hỗ trợ debug cho ứng dụng Laravel khi dùng với ứng dụng API và dùng với ứng dụng web có front đầy đủ.

Clockwork là một extension của trình duyệt, cung cấp tools để debug và ghi lại các hoạt động trong ứng dụng PHP, bao gồm request data, application log, database queries, routes, visualisation of application runtime and more.

Clockwork sử dụng một thành phần server-side, tập hợp tất cả dữ liệu và dễ dàng tích hợp với bất kỳ dự án PHP nào, bao gồm hỗ trợ ngoài luồng cho các frameworks

Bạn có thể xem giao diện dữ liệu được thu thập được thông qua extension Clockwork được tích hợp trên Chrome và Firefox.

1.2. Cài đặt

Bài viết sẽ hướng dẫn cài đặt và sử dụng trong Laravel framework, nếu bạn muốn cài đặt nó trong các framework khác, hãy tham khảo tại đây

Cài đặt Clockwork dựa vào Composer

$ composer require itsgoingd/clockwork

Nếu bạn đang dùng bản Laravel mới nhất, việc cài đặt đã xong ????.

Đối với các phiên bản thấp hơn 5.5, bạn cần đăng kí service provider, trong file config/app.php:

'providers' => [
	...
	ClockworkSupportLaravelClockworkServiceProvider::class
]

Mặc định thì Clockwork sẽ chỉ có debug mode, bạn có thể thay đổi các cài đặt khác trong file cấu hình. Để sinh file cấu hình, sử dụng vendor:publish Artisan command.

Nếu bạn thích sử dụng Facade, thêm dòng này vào file config/app.php:

'aliases' => [
	...
	'Clockwork' => ClockworkSupportLaravelFacade::class,
]

Note: Nếu bạn đang sử dụng Laravel route cache, bạn sẽ cần refresh lại bằng cách sử dụng lệnh route:cach Artisan command

1.3. Sử dụng

Để sử dụng được Clockwork, bạn cần tích hợp thêm extension cho trình duyệt

  • install the Chrome extension
  • or the Firefox add-on
  • or use the web UI http://your.app/__clockwork.

Ngoài ra Clockwork cung cấp các helper function giúp bạn ghi lại các log, events theo cách riêng của mình. Chi tiết các helper tham khảo tại đây.

Laravel Debugbar thêm 1 thanh bar thông minh dưới trình duyệt chứa các thông tin phục vụ debug (ví dụ số lượng queries). Với Eloquent, có thể dễ dàng thực hiện các yêu cầu cơ sở dữ liệu không cần thiết để Debugbar giúp xác định mã không hiệu quả.

Chi tiết xem tại đây

Đây có thể coi là trợ thử đắc lực của laravel giúp cho việc debug, đặc biệt cung cấp khả năng UI đẹp mắt và thân thiện. Tuy nhiên nó lại cần thao tác với DB và publish code font end cho ứng dụng của bạn.

Telescope provides insight into the requests coming into your application, exceptions, log entries, database queries, queued jobs, mail, notifications, cache operations, scheduled tasks, variable dumps and more. Telescope makes a wonderful companion to your local Laravel development environment.

Chi tiết cách cài đặt và sử dụng bạn có thể lên đây để theo dõi

Package này hỗ trợ mạnh mẽ cho Laravel tuy nhiên nó lại thiên về đọc log chứ không hỗ trỡ xem các thông tin (như query DB, performance DB). Nó cho phép bạn xem log trong thư mục storage/logs dưới dạng bảng HTML đẹp mắt.

Chi tiết: xem tại đây

Một trong những phần quan trọng khi debug là xem câu lệnh truy vấn SQL, bạn có thể hoàn toàn tự làm việc này.

File appProvidersAppServiceProvider:

/**
 * Log database queries and bindings to the standard log
 * Only when in debug mode and not running unit tests
 */
protected function bootDBLogger()
{
    if (config('app.debug_log_queries')) {
        DB::listen(function ($query) {
            Log::channel('queries')->debug($query->sql, [
                'time' => $query->time . ' ms', // milisecond
                'bindings' => $query->bindings,
            ]);
        });
    }
}

và đăng ký nó trong method boot()

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    $this->bootDBLogger();
}

Cập nhật file config nào: File configapp.php

    /*
     | Log queries to log file storage/queries.log
     |
     */
    'debug_log_queries' => env('DEBUG_LOG_QUERIES', false),

File configlogging.php

	'channels' => [
		...
        'queries' => [
            'driver' => 'single',
            'path' => storage_path('logs/queries.log'),
        ],
	],

Như vậy các query sẽ được ghi ra storage/logs/queries.log

  • Với các ứng dụng Laravel API, không có front-end để quan sát, sử dụng Clockwork và Telescope để debug hiệu quả. Tuy nhiên khi sử dụng Telescope thì lại ảnh hưởng đến code và DB do nó sinh ra code cho phần view.
  • Telescope có lẽ là ứng dụng quản lý việc debug đẹp mắt và chi tiết nhất (theo quan điểm cá nhân).
  • Clockwork và Laravel Debugbar dễ triển khai, chỉ cần cài qua Composer và tích hợp extension hoặc bật config là xong. Các package còn lại thì cần sinh thêm code (view html chẳng hạn) vì vậy sẽ phụ thuộc vào dự án mà cần cài đặt các debugger hợp lý.
  • Hãy thận trọng khi cài debugger, hãy để ở chế độ no-dev và khi triển khai trên các môi trường khác ngoài dev, bạn hãy chắc chắn rằng bạn đã tắt nó đi. Nếu ai đó xem được phần debugger này trên server, đó là điểm yếu của hệ thống cho các hacker khai thác ????.
composer require laravel/telescope --dev

And install

composer install --no-dev

Debug Laravel

0