Download example code from here
First create a php file under "App\Http\Middleware" named "LogAfterRequest.php" with following contents:
<?php
namespace App\Http\Middleware;
use Closure;
class LogAfterRequest
{
public function handle($request, Closure $next)
{
$this->logRequest($request);
return $next($request);
}
public function terminate($request, $response)
{
$this->logResponse($request, $response);
}
private function logResponse($request, $response)
{
$response = (array)$response;
$txt = $this->objectToString($response);
file_put_contents("logs/res_" . time() . "_" . rand(1, 100) . "_" . $this->makeLogFilename($request) . ".txt", $txt);
}
private function logRequest($request)
{
//$this->cleanLogDirectory();
$log = json_encode((array)$request->server);
$log = json_decode("{\"" . substr($log, 15))->parameters;
$txt = "";
foreach ($log as $k => $v) {
$txt .= $k . "===" . str_replace("\n", "", $v) . "\r\n";
}
file_put_contents("logs/req_" . time() . "_" . rand(1, 100) . "_" . $this->makeLogFilename($request) . ".txt", $txt);
}
private function objectToString($obj, $prefix = "")
{
$txt = "";
foreach ($obj as $k => $v) {
$t = gettype($v);
switch ($t) {
case "object":
case "array":
$k = $k . "\r\n";
$v = "\r\n" . $this->objectToString($v, $prefix . "\t");
break;
default:
$v = str_replace("\n", "", $v);
}
$k = preg_replace("/[^a-zA-Z0-9]+/", "", $k);
$txt .= $prefix . $k . "===" . $v . "\r\n";
}
return $txt;
}
private function cleanLogDirectory()
{
$files = scandir("logs");
foreach ($files as $file) {
if ($file != "." && $file != ".." && !is_dir($file) && file_exists($file)) {
unlink($file);
}
}
}
private function makeLogFilename($request)
{
$log = json_encode((array)$request->server);
$log = json_decode("{\"" . substr($log, 15))->parameters;
$name = str_replace("/", "_", $log->REQUEST_URI);
return preg_replace("/[^a-zA-Z0-9]+/", "_", $name);
}
}
?>
and add the following line "\App\Http\Middleware\LogAfterRequest::class" to Karnel.php as follows:
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\LogAfterRequest::class
];
protected $middlewareGroups = [
'user' => [
\App\Http\Middleware\LogAfterRequest::class,
\App\Http\Middleware\LogAfterRequest2::class
]
];
}
?>
No comments:
Post a Comment