Laravel'de Middleware Kullanarak Log Tutmak
#Laravel - 25 Jun 2023

Merhaba, son zamanlarda hem Go hem de Laravel ile geliştirmeler yapmaktayım. Projelerin geliştirme aşaması boyunca faydalı bulduğum konuları bloğumda dilimin döndüğü kadar sizlere aktarmaya çalışıyorum. Bu yazımda Laravel’de log tutmak için middleware nasıl yapılır onu kısaca göstereceğim. Yapacağımız middleware hem request hem de response içerecektir. Bu sayede oluşturmuş olduğunuz log dosyası yada log tablosunda gelen tüm isteklerin detaylarını görüntüleyebiliyor olacaksınız. Ben içerik boyunca "storage/logs/laravel.log" dosyası içerisinde log tutmayı göstereceğim. Siz ihtiyacınıza göre bunu şekillendirebilirsiniz.

İlk olarak middleware dosyamızı oluşturarak işleme başlayalım. Terminal üzerinden aşağıdaki komutu yazarak middleware dosyamızı oluşturabiliriz. Oluşan middleware dosyası "App/Http/Middleware" dizininde yer alacaktır.

php artisan make:middleware Log

Sonrasında oluşan middleware dosyasını aşağıdaki şekilde düzenlememiz gerekmekte. İlk olarak "use Illuminate\Support\Facades\Log" namespace'i dahil etmemiz gerekir. Bunu dahil ederek .log dosyası içerisine oluşan logları yazabileceğiz. Eğer siz database de bir tablo açıp tutmak isterseniz Model dosyasını bu şekil de dahil etmeniz gerekecektir.

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Log;

class Log
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
    
        $log = [
            'req' => $request->all(),
            'res' => $response->getContent()
        ];

        Log::info(json_encode($log));
    
        return $response;
    }
}

Middleware dosyasınıda gerekli şekilde düzenledikten sonra app/Httpkernel.php dosyasını açarak aşağıdaki şekilde ekleme yapmamız gerekmektedir. 

protected $routeMiddleware = [
    ...
    'log' =>  \App\Http\Middleware\Log::class,
];

Son olarak route içerisinde de ekleme yapacağız. Mevcut yada yeni oluşturmuş olduğunuz route için aşağıdaki şekilde ekleme yapabilirsiniz.

Route::get('me', 'AuthController@me')->middleware('log');

Tüm işlem bu kadar!