diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2026-02-05 22:23:46 +0000 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2026-02-05 22:44:07 +0000 |
| commit | 7ee413e0836cb5ab5484c29aae3cb76d2518b148 (patch) | |
| tree | d3f4afa0683418a0a1fdd4eb7a906bd7a2871328 | |
| parent | 7d1cb0345f9218d831447e108044317a81d0efbe (diff) | |
| download | webtrees-7ee413e0836cb5ab5484c29aae3cb76d2518b148.tar.gz webtrees-7ee413e0836cb5ab5484c29aae3cb76d2518b148.tar.bz2 webtrees-7ee413e0836cb5ab5484c29aae3cb76d2518b148.zip | |
Add debug log for SQL statements
| -rw-r--r-- | app/Http/Middleware/UseDatabase.php | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/app/Http/Middleware/UseDatabase.php b/app/Http/Middleware/UseDatabase.php index 6fc38ee4ea..c77e471989 100644 --- a/app/Http/Middleware/UseDatabase.php +++ b/app/Http/Middleware/UseDatabase.php @@ -53,6 +53,42 @@ class UseDatabase implements MiddlewareInterface verify_certificate: Validator::attributes($request)->boolean('dbverify', false), ); - return $handler->handle($request); + $debug = Validator::attributes($request)->boolean('debug', false); + + if (!$debug) { + return $handler->handle($request); + } + + // Log SQL queries in response headers + DB::connection()->enableQueryLog(); + $response = $handler->handle($request); + $queries = DB::connection()->getQueryLog(); + $slowest = max(array_column($queries, 'time')); + $total = array_sum(array_column($queries, 'time')); + $message = sprintf('Queries: %d, slowest: %.3f ms, total: %.3f ms', count($queries), $slowest, $total); + $response = $response->withAddedHeader('x-debug-sql', $message); + + foreach ($queries as $query) { + $sql = $query['query']; + $time = $query['time']; + $bindings = $query['bindings']; + foreach ($bindings as $binding) { + if (is_string($binding)) { + if (mb_strlen($binding) > 10) { + $binding = mb_substr($binding, 0, 9) . '...'; + } + + $binding = "'" . $binding . "'"; + } else { + $binding = (string) $binding; + } + + $sql = preg_replace('/\?/', $binding, $sql, 1); + } + $message = sprintf('%s (%.3f ms)', $sql, $time); + $response = $response->withAddedHeader('x-debug-sql', $message); + } + + return $response; } } |
