48 lines
1.3 KiB
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,
|
|
]);
|
|
}
|
|
}
|