lumen 通过事件记录日志mysql查询日志

Posted fogwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lumen 通过事件记录日志mysql查询日志相关的知识,希望对你有一定的参考价值。

有时,我们调试需要记录用户对数据库的查询记录。mysql 免费版没有这个功能,但是我们可以通过laravel 监听事件(event)来达到目的

第一步:通过命令新建文件

php artisan make:listenter SqlQueryListener

 

第二步:编辑 新建的这个文件

<?php

namespace AppListeners;

use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use IlluminateDatabaseEventsQueryExecuted;
use IlluminateSupportFacadesLog;
class SqlQueryListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * 记录SQL查询日志
     *
     * @param  object $event
     * @return void
     */
    public function handle(QueryExecuted $event)
    {
        try {
            if (env(‘API_DEBUG‘) == true) {
                $sql = str_replace("?", "‘%s‘", $event->sql);
                foreach ($event->bindings as $i => $binding) {
                    if ($binding instanceof DateTime) {
                        $event->bindings[$i] = $binding->format(‘‘Y-m-d H:i:s‘‘);
                    } else {
                        if (is_string($binding)) {
                            $event->bindings[$i] = "‘$binding‘";
                        }
                    }
                }
                $log = vsprintf($sql, $event->bindings);
                $log = $log . ‘  [ RunTime:‘ . $event->time . ‘ms ] ‘;
 /*记录sql查询信息到日志,记录日志并自定义位置*/
              Log::useDailyFiles(storage_path(‘logs/job/error.log‘));
              Log::info($log);

} } catch (Exception $exception) { } } }

 

第三步:在providers目录下EventServiceProvider设置

protected $listen = array(
              ...................
		‘IlluminateDatabaseEventsQueryExecuted‘ => [
			‘AppListenersQueryListener‘,
		],
		);

  

 

以上是关于lumen 通过事件记录日志mysql查询日志的主要内容,如果未能解决你的问题,请参考以下文章

(转)MySQL日志管理

MySQL之日志管理

MYSQL的binlog日志

如何动态开启mysql的慢查询日志记录

「mysql优化专题」什么是慢查询?如何通过慢查询日志优化?(10)

MySQL错误日志二进制日志慢查询日志事务日志