• File: Logger.php
  • Full Path: /var/www/imaliapi/app/Http/Middleware/Logger.php
  • Date Modified: 10/01/2024 6:48 PM
  • File size: 2.61 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Middleware;

use App\Classes\SendResponse;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;

class Logger
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {

        $startTime = microtime(true);

        $url = $request->fullUrl();

        if (str_contains($url, 'login')) {
            $request->headers->set('Content-Type', 'application/x-www-form-urlencoded');
        }

        // $wallet_name = 'mpesa';
        // if ($request->mobile_wallets_id == '21') {
        //     $wallet_name = 'mpesa';
        // } else if ($request->mobile_wallets_id == '22') {
        //     $wallet_name = 'emola';
        // } else if ($request->mobile_wallets_id == '23') {
        //     $wallet_name = 'mkesh';
        // }

        // if (str_contains($url, 'check-mpesa-withdrawall-transaction')) {

        //     // $req = Request::create('check/{wallet_name}/b2c-transaction', 'GET', ['wallet_name' => $wallet_name]);
        //     return redirect()->route('check', ['wallet_name' => $wallet_name]);
        //     // return Route::dispatch($req);
        // }

        Log::info('Requisição recebida', [
            'url' => $request->fullUrl(),
            'método' => $request->method(),
            'dados' => $request->all(),
            'IP' => $request->ip(),
        ]);

        try {
            //code...
            $response = $next($request);

            // Log de saída
            $endTime = microtime(true);
            $executionTime = $endTime - $startTime;

            Log::info('Resposta enviada', [
                'status' => $response->status(),
                'tempo_execução' => number_format($executionTime, 3) . ' segundos',
                'resposta' => $response->getContent(),
            ]);

            return $response;
        } catch (\Exception $e) {
            // Se ocorrer uma exceção, logar apenas a linha do erro
            Log::error('Erro na aplicação', [
                'mensagem' => $e->getMessage(),
                'arquivo' => $e->getFile(),
                'linha' => $e->getLine(), // Logar somente a linha do erro
            ]);

            // Retornar uma resposta de erro
            return response()->json(['error' => 'Ocorreu um erro interno no servidor.'], 500);
        }
    }
}