Halo gais, kali ini aku bakal sharing sebuah utility tools menarik yang bisa kamu pasang di project Laravel-mu untuk mempermudah debugging saat proses development sebuah aplikasi web. Jadi, utility tools yang akan aku gunakan pada tulisan ini adalah Laravel Debugbar.

Laravel Debugbar adalah package debugging yang sangat powerful dan dirancang khusus untuk aplikasi Laravel. Tools ini berfungsi sebagai panel informasi yang memberikan insight real-time terkait berbagai aspek performa aplikasi.

Dengan Laravel Debugbar, kamu bisa dengan cepat mengidentifikasi dan menyelesaikan error, bottleneck, dan masalah-masalah potensial lainnya. Fitur-fitur Laravel Debugbar dapat membantu kamu untuk mempercepat workflow development dan meningkatkan efisiensi debugging.

Perlu diingat, Laravel Debugbar hanya direkomendasikan untuk digunakan saat development. Jangan pernah digunakan pada website yang bisa diakses publik, karena Laravel Debugbar secara desain akan menampilkan informasi sensitif dari request yang tersimpan. Hal ini juga bisa memperlambat performa aplikasi, karena Laravel Debugbar perlu mengumpulkan berbagai data. Kalau kamu mengalami aplikasi jadi lambat, coba matikan beberapa collector-nya.

Berikut beberapa custom collector yang disediakan oleh Laravel Debugbar:

  • QueryCollector: Menampilkan semua query yang dieksekusi, termasuk binding dan timing-nya.
  • RouteCollector: Menampilkan informasi terkait route yang sedang diakses.
  • ViewCollector: Menampilkan views yang saat ini sedang di-load, dan kamu juga bisa melihat data yang di-share antar views.
  • EventsCollector: Menampilkan semua events yang dijalankan.
  • LaravelCollector: Menampilkan versi Laravel dan environment yang sedang digunakan (secara default collector ini dinonaktifkan).
  • SymfonyRequestCollector: Menggantikan RequestCollector dengan informasi yang lebih detail terkait request dan response.
  • LogsCollector: Menampilkan entri log terbaru dari storage log Laravel (disabled secara default).
  • FilesCollector: Menampilkan file-file yang di-include atau di-require oleh PHP (disabled secara default).
  • ConfigCollector: Menampilkan nilai-nilai dari file konfigurasi (disabled secara default).
  • CacheCollector: Menampilkan semua event cache (disabled secara default).

Dengan semua collector ini, kamu bisa melihat lebih dalam proses yang berjalan di aplikasi kamu saat development. Laravel Debugbar sangat berguna untuk melacak masalah performa, query yang lambat, hingga event yang mungkin tidak ter-trigger.

Okay, intronya sepertinya sudah cukup jadi mari langsung saja kita menuju proses instalasi, konfigurasi, dan penggunaan Laravel Debugbar.

1. Installasi Laravel Debugbar

Untuk menginstall package ini kalian dapat menjalankan command di bawah ini.

composer require barryvdh/laravel-debugbar --dev

Laravel sudah menggunakan fitur Package Auto-Discovery, jadi kamu tidak perlu menambahkan ServiceProvider secara manual. Laravel Debugbar akan aktif ketika APP_DEBUG disetel ke true di file .env.

Namun, jika kamu menggunakan catch-all/fallback route, pastikan kamu me-load dulu Debugbar ServiceProvider pada App ServiceProvider milikmu.

Jika kamu tidak menggunakan auto-discovery, tambahkan ServiceProvider ke dalam list providers. Untuk Laravel 11 atau lebih baru, tambahkan ServiceProvider di file bootstrap/providers.php. Sedangkan untuk Laravel 10 atau lebih lama, tambahkan di config/app.php seperti ini:

Barryvdh\Debugbar\ServiceProvider::class,

Jika kamu ingin menggunakan facade untuk log, tambahkan kode berikut di dalam method register pada app/Providers/AppServiceProvider.php:

public function register(): void
{
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Debugbar', \Barryvdh\Debugbar\Facades\Debugbar::class);
}

2. Konfigurasi Debugbar

Secara default, profiler akan aktif jika kamu menggunakan APP_DEBUG=true. Namun, kamu bisa menonaktifkannya dengan mengubah konfigurasi di config/debugbar.php atau dengan menyetel DEBUGBAR_ENABLED di file .env.

Selain itu, di dalam konfigurasi ini, kamu juga bisa mengatur apakah ingin menyertakan atau mengecualikan file vendor seperti FontAwesome, Highlight.js, dan jQuery. Jika kamu sudah menggunakan file-file ini di situsmu, setel nilainya menjadi false.

Kamu juga bisa memilih hanya menampilkan file js atau css dengan mengatur nilainya menjadi js atau css. (Untuk Highlight.js, kamu memerlukan keduanya, baik css maupun js, jadi setel ke true untuk penyorotan sintaksis).

Setelah instalasi, kamu bisa menyalin konfigurasi package ke dalam folder config lokal dengan menjalankan perintah berikut:

php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

Jika kamu menggunakan Laravel dengan Octane, pastikan untuk menambahkan LaravelDebugbar ke dalam list flush di file config/octane.php:

'flush' => [
\Barryvdh\Debugbar\LaravelDebugbar::class,
],

Untuk Lumen, registrasikan provider di bootstrap/app.php:

if (env('APP_DEBUG')) {
$app->register(Barryvdh\Debugbar\LumenServiceProvider::class);
}

Jika ingin mengubah konfigurasi, salin file ke folder config dan aktifkan dengan:

$app->configure('debugbar');
Tampilan Ketika Laravel Debugbar Sudah Aktif

3. Penggunaan Debugbar

Laravel Debugbar memungkinkan kamu untuk menambahkan messages menggunakan facade dengan PSR-3 level (seperti debug, info, notice, warning, error, critical, alert, dan emergency):

Debugbar::info($object);
Debugbar::error('Error!');
Debugbar::warning('Watch out…');
Debugbar::addMessage('Another message', 'mylabel');

Kamu juga bisa melakukan timing seperti ini:

Debugbar::startMeasure('render','Time for rendering');
Debugbar::stopMeasure('render');
Debugbar::addMeasure('now', LARAVEL_START, microtime(true));
Debugbar::measure('My long operation', function() {
// Do something…
});

Untuk log exceptions, contoh kodenya adalah seperti ini:

try {
throw new Exception('foobar');
} catch (Exception $e) {
Debugbar::addThrowable($e);
}

Ada juga beberapa helper functions yang tersedia untuk general usage:

debug($var1, $someString, $intValue, $object);
collect([$var1, $someString])->debug();
start_measure('render','Time for rendering');
stop_measure('render');
add_measure('now', LARAVEL_START, microtime(true));
measure('My long operation', function() {
// Do something…
});

Jika kamu ingin menambahkan DataCollectors sendiri, kamu bisa melakukannya melalui Container atau Facade:

Debugbar::addCollector(new DebugBar\DataCollector\MessagesCollector('my_messages'));

Atau melalui App container:

$debugbar = App::make('debugbar');
$debugbar->addCollector(new DebugBar\DataCollector\MessagesCollector('my_messages'));

Secara default, Debugbar akan disuntikkan sebelum tag </body>. Jika kamu ingin menyuntikkannya sendiri, atur opsi konfigurasi inject menjadi false, dan gunakan renderer:

$renderer = Debugbar::getJavascriptRenderer();

Namun, perlu diingat bahwa tidak menggunakan auto-inject akan menonaktifkan informasi Request, karena informasi tersebut ditambahkan setelah response. Kamu bisa menambahkan default_request datacollector di dalam konfigurasi sebagai alternatif.

Kamu juga bisa menyalakan atau mematikan Debugbar selama runtime dengan kode berikut:

\Debugbar::enable();
\Debugbar::disable();

Catatan: Sekali diaktifkan, collectors akan ditambahkan (yang bisa menambah overhead), jadi jika kamu ingin menggunakan Laravel Debugbar di production, pastikan menonaktifkannya di konfigurasi dan hanya mengaktifkannya saat diperlukan.

Laravel Debugbar dapat menyimpan request-request sebelumnya, yang bisa kamu lihat menggunakan tombol browse di sebelah kanan. Fitur ini hanya akan bekerja jika kamu mengaktifkan debugbar.storage.open di konfigurasi.

Pastikan fitur ini hanya diaktifkan di environment pengembangan lokal, karena jika tidak, orang lain bisa melihat request sebelumnya. Kamu juga bisa menentukan akses ke OpenHandler storage dengan meneruskan callback yang menerima objek Request untuk memeriksa akses.

Sip, cukup mudah bukan untuk installasi, konfigurasi, dan penggunaannya? Sekarang kalian bisa melakukan debugging pada project Laravel kalian dengan lebih proper dan lebih mudah!

Okee sip, jadi sekian dulu pembahasan kali ini. Semoga bermanfaat bagi teman-teman dan terimakasih sudah membaca!

Reference:
[1] https://github.com/barryvdh/laravel-debugbar

--

--