dress/app/Support/LogHelper.php

48 lines
1.3 KiB
PHP

<?php
namespace App\Support;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Log;
use Throwable;
class LogHelper
{
/**
* Log an exception with full request and context details.
*
* @param Throwable $e The exception to log
* @param string $message Custom log message
* @param array $extraContext Additional context data
*/
public static function logException(Throwable $e, string $message, array $extraContext = []): void
{
$request = request();
Log::error($message, [
'message' => $e->getMessage(),
'exception' => get_class($e),
'file' => $e->getFile(),
'line' => $e->getLine(),
// stack trace (take top 10)
'trace' => collect($e->getTrace())->take(10)->toArray(),
// request context
'request' => [
'url' => $request->fullUrl(),
'method' => $request->method(),
'ip' => $request->ip(),
'user_agent' => $request->userAgent(),
'payload' => Arr::except($request->all(), ['password', 'token', 'password_confirmation']),
],
// auth context
'user' => optional(auth()->user())->only(['id', 'email']),
// custom context
'extra' => $extraContext,
]);
}
}