2016-08-31 1 views
0

In Illuminate/Database/Connection.php kann ich:Kann Larve Log SQL-Abfragen schließlich? siehe

/** 
* Indicates whether queries are being logged. 
* 
* @var bool 
*/ 
protected $loggingQueries = false; 

/** 
* Enable the query log on the connection. 
* 
* @return void 
*/                                    public function enableQueryLog() 
{ 
    $this->loggingQueries = true; 
} 

/** 
* Disable the query log on the connection. 
* 
* @return void 
*/ 
public function disableQueryLog() 
{ 
    $this->loggingQueries = false; 
} 

/** 
* Determine whether we're logging queries. 
* 
* @return bool 
*/ 
public function logging() 
{ 
    return $this->loggingQueries; 
} 

/** 
* Run a SQL statement and log its execution context. 
* 
* @param string $query 
* @param array  $bindings 
* @param \Closure $callback 
* @return mixed 
* 
* @throws \Illuminate\Database\QueryException 
*/ 
protected function run($query, $bindings, Closure $callback) 
{ 
    ... 

    $this->logQuery($query, $bindings, $time); 

    return $result; 
} 

/** 
* Log a query in the connection's query log. 
* 
* @param string $query 
* @param array $bindings 
* @param float|null $time 
* @return void                                 */ 
public function logQuery($query, $bindings, $time = null)                      { 
    ... 

    if ($this->loggingQueries) {                               $this->queryLog[] = compact('query', 'bindings', 'time'); 
    } 
} 

Bekommt diese Daten irgendwo gespeichert? Wie aktiviere ich es global, wenn ja?

Antwort

1

Ich würde middleware verwenden, um es zu aktivieren. Dies würde Ihnen ermöglichen, mit Optionen zu aktivieren (wie nur in local Umgebungen, etc.).

Sie könnten die Informationen mit dd() sammeln oder mit Log::info() usw. So etwas wie:

namespace App\Http\Middleware; 

use DB; 
use Log; 
use Closure; 

class EnableQueryLogMiddleware 
{ 
    public function handle($request, Closure $next) 
    { 
     if (env('local')) { 
      DB::enableQueryLog(); 
     } 

     return $next($request); 
    } 

    public function terminate($request, $response) 
    { 
     // Here you can either Log it, DD, etc. 
     dd(DB::getQueryLog()); 
     Log::info(DB::getQueryLog()); 
    } 
} 
+0

So ist es keine einfache Möglichkeit, wie einige Parameter in 'config/database.php' Angabe? –

+0

Ich denke, die Erstellung von Middleware wie oben ist einfach, es dauert <5 Minuten zu aktivieren. Für mich ist das der einfachste Weg, aber das ist nur meine Meinung. Sie können 'DB :: enableQueryLog();' _anywhere_ in Ihrer Anwendung verwenden, was die Fähigkeit ermöglicht, die Abfragen zu protokollieren, so dass Sie sie theoretisch in Ihre 'app/bootstrap/app.php' Datei legen könnten. Nicht elegant, aber ich glaube, es würde funktionieren. – camelCase

+0

Einfach bestätigen. Ich hoffte, es kann nur durch Ändern einiger Konfigurationsparameter verwendet werden. Aber es stellte sich heraus, dass es mehr Anstrengung als das braucht. Aber nicht viel. Und ich stimme wahrscheinlich zu, dass die Verwendung von Middleware im Allgemeinen eine bessere Option ist. –