fruitcake/laravel-debugbar
Integrate PHP DebugBar into Laravel to inspect requests in real time. Track queries, time, memory, routes, views, events, logs, and exceptions with an in-browser toolbar. Configurable collectors, storage, and easy setup for local development and debugging.
Installation:
composer require fruitcake/laravel-debugbar
Publish the config file:
php artisan vendor:publish --provider="Fruitcake\LaravelDebugbar\DebugbarServiceProvider"
Enable Debug Mode:
Set APP_DEBUG=true in your .env file.
First Use Case: Visit any route in your Laravel app. The debug bar will appear at the bottom of the page, displaying default collectors (queries, messages, timeline, etc.).
Debugging Queries:
db collector in config/debugbar.php to inspect SQL queries, execution time, and parameters.debugbar()->addCollector() dynamically to enable collectors for specific routes or middleware.Logging Messages:
dd() or dump() with debug() for cleaner output in the Messages tab.Debugbar facade for structured logging:
Debugbar::info('User logged in', ['user_id' => $user->id]);
Performance Profiling:
Debugbar::startMeasure() and Debugbar::stopMeasure() to track custom operations:
Debugbar::startMeasure('render', 'Rendering view');
// ... view logic ...
Debugbar::stopMeasure('render');
Exception Handling:
exceptions collector.try { ... } catch (\Exception $e) {
Debugbar::addThrowable($e);
}
Conditional Debugging:
'collectors' => [
'db' => env('APP_DEBUG') ? true : false,
]
if (request()->ip() === '127.0.0.1') {
debugbar()->enable();
}
Middleware: Enable debugbar for specific routes:
public function handle($request, Closure $next) {
if ($request->ip() === '127.0.0.1') {
debugbar()->enable();
}
return $next($request);
}
Livewire:
The livewire collector auto-detects Livewire components and logs their lifecycle.
Twig:
Replace {{ dump(var) }} with {{ debug(var) }} for formatted output in templates.
Jobs:
Enable debugbar.collect_jobs in .env to track dispatched jobs (requires jobs collector).
Performance Overhead:
APP_DEBUG=false).soft_limit and hard_limit in db collector to cap query logging:
'db' => [
'soft_limit' => 50, // Stop capturing params after 50 queries
'hard_limit' => 200, // Ignore queries after 200
]
Storage Risks:
debugbar.storage.open in production—it exposes request history to all users.'storage' => [
'open' => function ($request) {
return $request->ip() === '127.0.0.1';
},
]
Query Backtrace:
'db' => [
'backtrace_exclude_paths' => [
'vendor/laravel/',
'vendor/fruitcake/',
],
]
Twig Conflicts:
rcrowe/TwigBridge is version 0.6.x for Debugbar’s Twig extensions.php artisan twig:clear
Livewire Compatibility:
debugbar()->disable() in Livewire components.Disable Collectors Temporarily:
Override config in bootstrap/app.php:
$debugbar = app('debugbar');
$debugbar->disableCollector('db'); // Disable queries
Custom Collectors:
Extend existing collectors (e.g., MessagesCollector) or create new ones:
use DebugBar\DataCollector\DataCollector;
class MyCollector extends DataCollector {
public function collect() {
$this->data['custom_data'] = 'value';
}
}
Debugbar::addCollector(new MyCollector());
Query EXPLAIN: Enable on-demand EXPLAIN for slow queries:
'db' => [
'explain' => [
'enabled' => true,
],
]
Click the "EXPLAIN" button in the Debugbar UI.
Memory Leaks:
Monitor memory usage with the memory collector. High spikes may indicate:
Environment Variables:
Override config via .env:
DEBUGBAR_COLLECTORS="db,time,messages"
DEBUGBAR_DB_SOFT_LIMIT=20
Middleware Order:
Place DebugbarMiddleware after TrustProxies and before VerifyCsrfToken to avoid IP mismatches.
Livewire Debugging:
Use debugbar()->disable() in AppServiceProvider for Livewire-only routes:
if (request()->route()->getName() === 'livewire.route') {
debugbar()->disable();
}
CSRF Token:
Debugbar may interfere with CSRF verification. Exclude its routes in VerifyCsrfToken:
protected $except = [
'debugbar/*',
];
How can I help you explore Laravel packages today?