MysqlLoggerHandler.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace App\Logging;
  3. use Illuminate\Support\Facades\DB;
  4. use Illuminate\Support\Facades\Log;
  5. use Monolog\Handler\AbstractProcessingHandler;
  6. use Monolog\Logger;
  7. use App\Models\Log as LogModel;
  8. class MysqlLoggerHandler extends AbstractProcessingHandler
  9. {
  10. public function __construct($level = Logger::DEBUG, bool $bubble = true)
  11. {
  12. parent::__construct($level, $bubble);
  13. }
  14. protected function write(array $record): void
  15. {
  16. try{
  17. if(isset($record['context']['exception']) && is_object($record['context']['exception'])){
  18. $record['context']['exception'] = (array)$record['context']['exception'];
  19. }
  20. $record['request_data'] = request()->all() ??[];
  21. $log = [
  22. 'title' => $record['message'],
  23. 'level' => $record['level_name'],
  24. 'host' => $record['request_host'] ?? request()->getSchemeAndHttpHost(),
  25. 'uri' => $record['request_uri'] ?? request()->getRequestUri(),
  26. 'method' => $record['request_method'] ?? request()->getMethod(),
  27. 'ip' => request()->getClientIp(),
  28. 'data' => json_encode($record['request_data']) ,
  29. 'context' => isset($record['context']) ? json_encode($record['context']) : '',
  30. 'created_at' => strtotime($record['datetime']),
  31. 'updated_at' => strtotime($record['datetime']),
  32. ];
  33. LogModel::insert(
  34. $log
  35. );
  36. }catch (\Exception $e){
  37. Log::channel('daily')->error($e->getMessage().$e->getFile().$e->getTraceAsString());
  38. }
  39. }
  40. }