<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Laravel并不會默認打印sql,所以需要我們自己來設置。 # 1、臨時打印SQL ``` DB::enableQueryLog(); ``` 查詢操作 ``` Log::debug(DB::getQueryLog()); ``` # 2、自動記錄SQL日志 ## 方法1:監聽 QueryExecuted 事件 此事件是由 Illuminate\Database 提供,并且當你發起SQL的時候,此事件是被觸發的,只是沒有對應的監聽器罷了。 在 app/Providers/EventServicePorvider.php 文件中 添加要注冊的事件 ``` use Illuminate\Database\Events\QueryExecuted; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider { protected $listen = [ 'Illuminate\Database\Events\QueryExecuted' => [ 'App\Listeners\QueryListener', ], ]; } ``` 執行 命令 php artisan event:generate 在 App\Listeners\QueryListener 文件的 handle 方法中編寫記錄 sql 的業務邏輯,如: ``` use Monolog\Handler\RotatingFileHandler; use Monolog\Logger; public function handle(QueryExecuted $event) { try{ if (env('APP_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 ] '; (new Logger('sql'))->pushHandler(new RotatingFileHandler(storage_path('logs/sql/sql.log')))->info($log); } }catch (\Exception $exception){ } } ``` 搜索: ~~~ $app->register(App\Providers\EventServiceProvider::class); ~~~ 如果注釋,去掉注釋 lumen在:bootstrap/app.php 文件里 日志文件默認保存在 storage/logs/sql/ 目錄下 ## 方法2 在 app/providers/AppServicesProviders.php 文件的 boot 方法編寫如下代碼 ``` use Illuminate\Support\Facades\DB; DB::listen( function ($sql) { foreach ($sql->bindings as $i => $binding) { if ($binding instanceof \DateTime) { $sql->bindings[$i] = $binding->format('Y-m-d H:i:s'); } else { if (is_string($binding)) { $sql->bindings[$i] = "'$binding'"; } } } // Insert bindings into query $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql); $query = vsprintf($query, $sql->bindings); // Save the query to file $logFile = fopen( storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . '_query.log'), 'a+' ); fwrite($logFile, date('Y-m-d H:i:s') . ': ' . $query . PHP_EOL); fclose($logFile); } ); ``` 或者 ``` DB::listen(function ($query) { $tmp = str_replace('?', '"'.'%s'.'"', $query->sql); $qBindings = []; foreach ($query->bindings as $key => $value) { if (is_numeric($key)) { $qBindings[] = $value; } else { $tmp = str_replace(':'.$key, '"'.$value.'"', $tmp); } } $tmp = vsprintf($tmp, $qBindings); $tmp = str_replace("\\", "", $tmp); \Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t"); }); ``` 我們來看一下源碼 此處 Facades\DB 代表我的 Illuminate\Database\MySqlConnection ,因為我也的是MySQL數據庫,在它的基類 Connection 中有個 listen 方法: ``` public function listen(Closure $callback) { if (isset($this->events)) { $this->events->listen(Events\QueryExecuted::class, $callback); } } ``` 就是將閉包 $callback 監聽 Events\QueryExecuted 事件,也就是方法1的 Illuminate\Database\Events\QueryExecuted 事件,然后傳入到閉包中的參數 $sql 或 q u e r y 就 是 方 法 1 的 query 就是方法1的query就是方法1的event。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看