DEV Community

arasosman
arasosman

Posted on • Originally published at mycuriosity.blog

How to Disable the Laravel Debugbar in Production

Quick Fix: Environment-Based Control

Your production site is slow and leaking sensitive data through the Debugbar? Here's the immediate fix:

// .env file - Production environment
APP_ENV=production
APP_DEBUG=false
DEBUGBAR_ENABLED=false

// .env file - Development environment  
APP_ENV=local
APP_DEBUG=true
DEBUGBAR_ENABLED=true
Enter fullscreen mode Exit fullscreen mode

Laravel Debugbar Configuration Methods

Multiple ways to control Debugbar based on your setup and Laravel version:

// config/debugbar.php - Environment-based enabling
'enabled' => env('DEBUGBAR_ENABLED', env('APP_DEBUG', false)),

// More restrictive - only enable in local environment
'enabled' => env('APP_ENV') === 'local',

// Custom logic - enable for specific users or IPs
'enabled' => env('APP_DEBUG') && (
    in_array(request()->ip(), ['127.0.0.1', '192.168.1.100']) ||
    auth()->check() && auth()->user()->is_developer
),

// Disable completely in production
'enabled' => false,
Enter fullscreen mode Exit fullscreen mode

Conditional service provider registration (AppServiceProvider.php):

public function register()
{
    // Only register Debugbar in non-production environments
    if ($this->app->environment('local', 'testing', 'staging')) {
        if (class_exists(\Barryvdh\Debugbar\ServiceProvider::class)) {
            $this->app->register(\Barryvdh\Debugbar\ServiceProvider::class);
        }
    }
}

// Or remove from config/app.php providers array entirely
// Comment out or remove this line in production:
// Barryvdh\Debugbar\ServiceProvider::class,
Enter fullscreen mode Exit fullscreen mode

Production Security and Performance

Why disabling Debugbar in production is critical:

// What Debugbar exposes in production (DANGEROUS):
// - Database queries with sensitive data
// - Environment variables and secrets
// - User session data
// - Application file paths and structure
// - Memory usage and performance metrics

// Proper production configuration
// config/app.php
'debug' => env('APP_DEBUG', false),

// config/debugbar.php
'enabled' => env('APP_DEBUG', false) && env('APP_ENV') !== 'production',

// Additional security layers
'capture_ajax' => env('APP_ENV') === 'local',
'capture_console' => env('APP_ENV') === 'local',

// Disable specific collectors in staging
'collectors' => [
    'phpinfo' => false,        // Never expose phpinfo() in staging/prod
    'messages' => env('APP_ENV') === 'local',
    'time' => env('APP_ENV') === 'local',
    'memory' => env('APP_ENV') === 'local',
    'exceptions' => env('APP_ENV') === 'local',
    'queries' => env('APP_ENV') === 'local',
    'mail' => env('APP_ENV') === 'local',
],
Enter fullscreen mode Exit fullscreen mode

Advanced production debugging alternatives:

// Use proper logging instead of Debugbar in production
Log::info('User action', [
    'user_id' => auth()->id(),
    'action' => 'purchase',
    'product_id' => $product->id,
    'execution_time' => microtime(true) - $start_time
]);

// Performance monitoring with custom middleware
class PerformanceMonitor
{
    public function handle($request, Closure $next)
    {
        $start = microtime(true);
        $response = $next($request);

        if (config('app.env') === 'production') {
            $duration = microtime(true) - $start;

            // Log slow requests only
            if ($duration > 2.0) {
                Log::warning('Slow request detected', [
                    'url' => $request->fullUrl(),
                    'method' => $request->method(),
                    'duration' => $duration,
                    'memory_peak' => memory_get_peak_usage(true)
                ]);
            }
        }

        return $response;
    }
}

// Environment-specific service providers
// config/app.php
'providers' => [
    // ... other providers

    // Only in local/testing environments
    App\Providers\LocalServiceProvider::class,

    /*
     * Development-only providers
     */
    ...(app()->environment('local', 'testing') ? [
        Barryvdh\Debugbar\ServiceProvider::class,
        Laravel\Telescope\TelescopeServiceProvider::class,
    ] : []),
],
Enter fullscreen mode Exit fullscreen mode

Never leave Debugbar enabled in production. It exposes sensitive information, consumes memory, and slows down responses. Use proper logging and monitoring tools like Laravel Telescope (in development) or external services like New Relic for production insights.

Related: Laravel Collections: Beyond Basic Array Operations | Laravel Events and Listeners: Building Decoupled Applications | Building Multi-tenant Applications with Laravel: A Comprehensive Guide | Debugging Techniques & Tools 2025: Complete Guide | PHP Performance: Profiling and Optimization Techniques

Top comments (0)