12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace Modules\User\Models;
- use Catch\CatchAdmin;
- use Catch\Traits\DB\BaseOperate;
- use Catch\Traits\DB\ScopeTrait;
- use Catch\Traits\DB\Trans;
- use Illuminate\Contracts\Http\Kernel;
- use Illuminate\Database\Eloquent\Casts\Attribute;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Route;
- use Symfony\Component\HttpFoundation\Response;
- class LogOperate extends Model
- {
- use BaseOperate, Trans, ScopeTrait;
- protected $table = 'log_operate';
- protected $fillable = [
- 'id',
- 'module',
- 'action',
- 'params',
- 'ip',
- 'http_method',
- 'http_code',
- 'start_at',
- 'time_taken',
- 'creator_id',
- 'created_at',
- ];
- /**
- * @param Request $request
- * @param Response $response
- * @return void
- */
- public function log(Request $request, Response $response): void
- {
- $user = Auth::guard(getGuardName())->user();
- $userModel = getAuthUserModel();
- if (! $user instanceof $userModel) {
- return;
- }
- [$module, $controller, $action] = CatchAdmin::parseFromRouteAction();
- $requestStartAt = app(Kernel::class)->requestStartedAt()->getPreciseTimestamp(3);
- $params = $request->all();
- // 如果参数过长则不记录
- if (!empty($params)) {
- if (strlen(\json_encode($params, JSON_UNESCAPED_UNICODE)) > 5000) {
- $params = [];
- }
- }
- $timeTaken = intval(microtime(true) * 1000 - $requestStartAt);
- $this->storeBy([
- 'module' => $module,
- 'action' => $controller . '@' . $action,
- 'creator_id' => $user->id,
- 'http_method' => $request->method(),
- 'http_code' => $response->getStatusCode(),
- 'start_at' => intval($requestStartAt/1000),
- 'time_taken' => $timeTaken,
- 'ip' => $request->ip(),
- 'params' => \json_encode($params, JSON_UNESCAPED_UNICODE),
- 'created_at' => time()
- ]);
- }
- /**
- *
- * @return Attribute
- */
- protected function timeTaken(): Attribute
- {
- return Attribute::make(
- get: fn ($value) => $value > 1000 ? intval($value/1000) . 's' : $value . 'ms',
- );
- }
- }
|