<?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);
}
}
}