PHP ve Laravel Debugging: Hata Ayıklama Teknikleri
z
zafer ak
Yazar
06 November 2025
2 dakika okuma
2 görüntülenme
PHP debugging araçları, Xdebug, Laravel Telescope ve Ray. Production debugging ve log management.
Debugging Araçları
dd() ve dump()
// Die and dump
dd($variable);
// Dump without dying
dump($variable);
// Multiple variables
dd($user, $orders, $total);
// Collection debug
$users->dd();
Laravel Log
use Illuminate\Support\Facades\Log;
Log::debug('Debug message', ['user_id' => $user->id]);
Log::info('User logged in');
Log::warning('Low stock alert');
Log::error('Payment failed', ['order_id' => $order->id]);
// Contextual logging
Log::withContext(['user_id' => auth()->id()])
->info('Order created');
Xdebug
# php.ini
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
# VS Code launch.json
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www": "${workspaceFolder}"
}
}
Laravel Telescope
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate
// TelescopeServiceProvider
public function register()
{
Telescope::night();
$this->hideSensitiveRequestDetails();
Telescope::filter(function (IncomingEntry $entry) {
if ($this->app->environment('local')) {
return true;
}
return $entry->isReportableException() ||
$entry->isFailedRequest() ||
$entry->isSlowQuery(100);
});
}
Ray (Spatie)
composer require spatie/laravel-ray
// Kullanım
ray($variable);
ray($user)->green();
ray('Query count')->count();
// Measure execution time
ray()->measure();
// ... code
ray()->measure();
// Pause execution
ray()->pause();
// Show queries
ray()->showQueries();
Query Debugging
// Query log
DB::enableQueryLog();
// ... queries
dd(DB::getQueryLog());
// Single query
User::where('active', true)->toSql();
// "select * from users where active = ?"
// With bindings
User::where('active', true)->toRawSql();
// "select * from users where active = true"
Exception Handling
// app/Exceptions/Handler.php
public function register(): void
{
$this->reportable(function (Throwable $e) {
if ($e instanceof PaymentException) {
Log::channel('payments')->error($e->getMessage(), [
'trace' => $e->getTraceAsString()
]);
}
});
}
// Custom exception
throw new PaymentException('Card declined', [
'card_last4' => $card->last4
]);
Production Debugging
# Error tracking services
- Sentry
- Bugsnag
- Flare (Ignition)
# Sentry integration
composer require sentry/sentry-laravel
php artisan sentry:publish
// .env
SENTRY_LARAVEL_DSN=https://[email protected]/xxx
Log Management
// config/logging.php
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'slack'],
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'level' => 'error',
],
]
Sonuç
Etkili debugging, development süresini kısaltır. Doğru araçları kullanmak ve log stratejisi oluşturmak önemlidir.