From 7a3ba45d5f9931e4c7c636aae1c969ab722197ac Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Tue, 15 Nov 2016 23:11:14 -0300 Subject: [PATCH] Query Stack trace listener refactored eloquent mysql query listener and added stack trace. Change-Id: I1e152a7254a9eb3c57de35596af1e2e6c73b70f0 --- app/Listeners/QueryExecutedListener.php | 65 +++++++++++++++++++++++++ app/Providers/AppServiceProvider.php | 35 ++----------- app/Providers/EventServiceProvider.php | 7 +-- config/server.php | 1 + 4 files changed, 74 insertions(+), 34 deletions(-) create mode 100644 app/Listeners/QueryExecutedListener.php diff --git a/app/Listeners/QueryExecutedListener.php b/app/Listeners/QueryExecutedListener.php new file mode 100644 index 00000000..e26af542 --- /dev/null +++ b/app/Listeners/QueryExecutedListener.php @@ -0,0 +1,65 @@ +sql; + $bindings = $event->bindings; + + // Format binding data for sql insertion + foreach ($bindings as $i => $binding) { + if ($binding instanceof DateTime) { + $bindings[$i] = $binding->format('\'Y-m-d H:i:s\''); + } else { + if (is_string($binding)) { + $bindings[$i] = "'$binding'"; + } + } + } + + $time = $event->time; + $connection = $event->connectionName; + $data = compact('bindings', 'time', 'connection'); + // Insert bindings into query + $query = str_replace(array('%', '?'), array('%%', '%s'), $query); + $query = vsprintf($query, $bindings); + Log::info($query, $data); + + //trace + if (Config::get("server.db_log_trace_enabled", false)){ + $trace = ''; + $entries = debug_backtrace(); + unset($entries[0]); + foreach ($entries as $entry) { + if (!isset($entry['file']) || !isset($entry['line'])) continue; + $trace .= $entry['file'] . ' ' . $entry['line'] . PHP_EOL; + } + Log::debug($trace); + } + } + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 0d31370c..d74208d4 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -1,15 +1,15 @@ pushHandler($handler); } - if(Config::get("server.db_log_enabled", false)) { - - Event::listen('illuminate.query', function ($query, $bindings, $time, $name) { - $data = compact('bindings', 'time', 'name'); - - // Format binding data for sql insertion - foreach ($bindings as $i => $binding) { - if ($binding instanceof \DateTime) { - $bindings[$i] = $binding->format('\'Y-m-d H:i:s\''); - } else { - if (is_string($binding)) { - $bindings[$i] = "'$binding'"; - } - } - } - - // Insert bindings into query - $query = str_replace(array('%', '?'), array('%%', '%s'), $query); - $query = vsprintf($query, $bindings); - - Log::info($query, $data); - }); - - } - Validator::extend('int_array', function($attribute, $value, $parameters, $validator) { $validator->addReplacer('int_array', function($message, $attribute, $rule, $parameters) use ($validator) { @@ -73,7 +48,6 @@ class AppServiceProvider extends ServiceProvider return true; }); - Validator::extend('text', function($attribute, $value, $parameters, $validator) { $validator->addReplacer('text', function($message, $attribute, $rule, $parameters) use ($validator) { @@ -83,7 +57,6 @@ class AppServiceProvider extends ServiceProvider return preg_match('/^[^<>\"\']+$/u', $value); }); - Validator::extend('string_array', function($attribute, $value, $parameters, $validator) { $validator->addReplacer('string_array', function($message, $attribute, $rule, $parameters) use ($validator) { diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 7407a405..1440b82f 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -26,12 +26,13 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ - 'App\Events\SomeEvent' => [ - 'App\Listeners\EventListener', + 'Illuminate\Database\Events\QueryExecuted' => [ + 'App\Listeners\QueryExecutedListener', ], ]; - /** + + /** * Register any other events for your application. * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void diff --git a/config/server.php b/config/server.php index 48e033bb..46b6fd5b 100644 --- a/config/server.php +++ b/config/server.php @@ -16,6 +16,7 @@ return array ( 'ssl_enabled' => env('SSL_ENABLED', false), 'db_log_enabled' => env('DB_LOG_ENABLED', false), + 'db_log_trace_enabled' => env('DB_LOG_TRACE_ENABLED', false), 'access_token_cache_lifetime' => env('ACCESS_TOKEN_CACHE_LIFETIME', 300), 'assets_base_url' => env('ASSETS_BASE_URL', null), 'response_cache_lifetime' => env('API_RESPONSE_CACHE_LIFETIME', 300),