<?php
namespace app\exception;
use app\model\api\Log;
use think\exception\Handle;
use Throwable;
class Http extends Handle
{
protected $ignoreReport = [];
public function report(Throwable $exception): void
{
if(PHP_SAPI !== 'cli') {
$request = request();
try{
Log::create([
'rule' => $request->url(),
'request_body' => json_encode(request()->post(), JSON_UNESCAPED_UNICODE),
'request_header' => json_encode(request()->header(), JSON_UNESCAPED_UNICODE),
'ip' => $request->ip(),
'status_code' => 500,
'response_body' => json_encode($this->convertExceptionToArray($exception), JSON_UNESCAPED_UNICODE),
'create_time' => date('Y-m-d H:i:s'),
]);
}catch (\Exception $e){
}
}
parent::report($exception);
}
protected function convertExceptionToArray(Throwable $exception): array
{
$data = parent::convertExceptionToArray($exception);
$data['tables']['Server/Request Data'] = $this->changeToUtf8($this->app->request->server());
return $data;
}
protected function changeToUtf8(array $data): array
{
foreach ($data as $key => $value) {
$data[$key] = mb_convert_encoding($value, "UTF-8", "GBK, GBK2312");
}
return $data;
}
}