60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| declare(strict_types=1);
 | |
| /**
 | |
|  * This file is part of Hyperf.
 | |
|  *
 | |
|  * @link     https://www.hyperf.io
 | |
|  * @document https://hyperf.wiki
 | |
|  * @contact  group@hyperf.io
 | |
|  * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
 | |
|  */
 | |
| namespace App\Listener;
 | |
| 
 | |
| use Hyperf\Database\Events\QueryExecuted;
 | |
| use Hyperf\Event\Annotation\Listener;
 | |
| use Hyperf\Event\Contract\ListenerInterface;
 | |
| use Hyperf\Logger\LoggerFactory;
 | |
| use Hyperf\Utils\Arr;
 | |
| use Hyperf\Utils\Str;
 | |
| use Psr\Container\ContainerInterface;
 | |
| use Psr\Log\LoggerInterface;
 | |
| 
 | |
| #[Listener]
 | |
| class DbQueryExecutedListener implements ListenerInterface
 | |
| {
 | |
|     /**
 | |
|      * @var LoggerInterface
 | |
|      */
 | |
|     private $logger;
 | |
| 
 | |
|     public function __construct(ContainerInterface $container)
 | |
|     {
 | |
|         $this->logger = $container->get(LoggerFactory::class)->get('sql');
 | |
|     }
 | |
| 
 | |
|     public function listen(): array
 | |
|     {
 | |
|         return [
 | |
|             QueryExecuted::class,
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param QueryExecuted $event
 | |
|      */
 | |
|     public function process(object $event): void
 | |
|     {
 | |
|         if ($event instanceof QueryExecuted) {
 | |
|             $sql = $event->sql;
 | |
|             if (! Arr::isAssoc($event->bindings)) {
 | |
|                 foreach ($event->bindings as $key => $value) {
 | |
|                     $sql = Str::replaceFirst('?', "'{$value}'", $sql);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $this->logger->info(sprintf('[%s] %s', $event->time, $sql));
 | |
|         }
 | |
|     }
 | |
| }
 |