Skip to content
This repository was archived by the owner on Feb 28, 2023. It is now read-only.

Commit 892b63f

Browse files
author
Robert Kummer
committed
first commit
0 parents  commit 892b63f

File tree

4 files changed

+162
-0
lines changed

4 files changed

+162
-0
lines changed

README.md

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Slow Query Logger for Laravel
2+
3+
[![Latest Stable Version](https://poser.pugx.org/rokde/laravel-slow-query-logger/v/stable.svg)](https://packagist.org/packages/rokde/laravel-slow-query-logger) [![Latest Unstable Version](https://poser.pugx.org/rokde/laravel-slow-query-logger/v/unstable.svg)](https://packagist.org/packages/rokde/laravel-slow-query-logger) [![License](https://poser.pugx.org/rokde/laravel-slow-query-logger/license.svg)](https://packagist.org/packages/rokde/laravel-slow-query-logger) [![Total Downloads](https://poser.pugx.org/rokde/laravel-slow-query-logger/downloads.svg)](https://packagist.org/packages/rokde/laravel-slow-query-logger)
4+
5+
## Quickstart
6+
7+
```
8+
composer require rokde/laravel-slow-query-logger
9+
```
10+
11+
Add to `providers` in `config/app.php`:
12+
13+
```
14+
Rokde\LaravelSlowQueryLogger\LaravelSlowQueryLoggerProvider::class,
15+
```
16+
17+
## Installation
18+
19+
Add to your composer.json following lines
20+
21+
"require": {
22+
"rokde/laravel-slow-query-logger": "~0.0"
23+
}
24+
25+
Add `Rokde\LaravelSlowQueryLogger\LaravelSlowQueryLoggerProvider::class,` to `providers` in `config/app.php`.
26+
27+
Run `php artisan vendor:publish --provider="Rokde\LaravelSlowQueryLogger\LaravelSlowQueryLoggerProvider"`
28+
29+
## Configuration
30+
31+
### `time-to-log`
32+
33+
Only log queries longer than this value in microseconds.
34+
35+
### `environments`
36+
37+
Set the enabled environments to log slow queries.
38+
39+
### `log-level`
40+
41+
Set the log-level for logging the slow queries.
42+
43+
## Usage
44+
45+
Nothing to do after adding to `/config/app.php`. Watch your logs.

composer.json

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "rokde/laravel-slow-query-logger",
3+
"description": "Slow Query Logger for Laravel",
4+
"license": "MIT",
5+
"authors": [
6+
{
7+
"name": "Robert Kummer",
8+
"email": "[email protected]"
9+
}
10+
],
11+
"autoload": {
12+
"psr-4": {
13+
"Rokde\\LaravelSlowQueryLogger\\": "src/"
14+
}
15+
},
16+
"minimum-stability": "stable",
17+
"require": {
18+
"php": ">=5.5.9",
19+
"illuminate/support": "5.2.*",
20+
"illuminate/database": "5.2.*"
21+
}
22+
}

config/slow-query-logger.php

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
return [
4+
/**
5+
* log all sql queries that are slower than X seconds
6+
* laravel measures at a precision of 2 digits, so 0.7134 will be logged as 0.71
7+
*/
8+
'time-to-log' => 0.7,
9+
10+
/**
11+
* log when you are on these environments
12+
*/
13+
'environments' => [
14+
'local',
15+
],
16+
17+
/**
18+
* level to log
19+
*/
20+
'log-level' => 'debug',
21+
];
+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
namespace Rokde\LaravelSlowQueryLogger;
4+
5+
use Illuminate\Contracts\Events\Dispatcher;
6+
use Illuminate\Database\Events\QueryExecuted;
7+
use Illuminate\Log\Writer;
8+
use Illuminate\Support\ServiceProvider;
9+
10+
class LaravelSlowQueryLoggerProvider extends ServiceProvider
11+
{
12+
/**
13+
* Bootstrap the application services.
14+
* @param Dispatcher $events
15+
* @param Writer $log
16+
*/
17+
public function boot(Dispatcher $events, Writer $log)
18+
{
19+
$this->publishes([
20+
__DIR__ . '/../config/slow-query-logger.php' => config_path('slow-query-logger.php'),
21+
], 'config');
22+
23+
$this->setupListener($events, $log);
24+
}
25+
26+
/**
27+
* Register the application services.
28+
*
29+
* @return void
30+
*/
31+
public function register()
32+
{
33+
$this->mergeConfigFrom(
34+
__DIR__ . '/../config/slow-query-logger.php', 'slow-query-logger'
35+
);
36+
}
37+
38+
/**
39+
* setting up listener
40+
*
41+
* @param Dispatcher $events
42+
* @param Writer $log
43+
*/
44+
private function setupListener(Dispatcher $events, Writer $log)
45+
{
46+
$environments = config('slow-query-logger.environments', []);
47+
48+
if (!$this->app->environment($environments)) {
49+
return;
50+
}
51+
52+
$events->listen(QueryExecuted::class, function (QueryExecuted $queryExecuted) use ($log) {
53+
$sql = $queryExecuted->sql;
54+
$bindings = $queryExecuted->bindings;
55+
$time = $queryExecuted->time;
56+
57+
$logSqlQueriesSlowerThan = config('slow-query-logger.time-to-log');
58+
if ($logSqlQueriesSlowerThan < 0 || $time < $logSqlQueriesSlowerThan) {
59+
return;
60+
}
61+
62+
$level = config('slow-query-logger.log-level', 'debug');
63+
try {
64+
foreach ($bindings as $val) {
65+
$sql = preg_replace('/\?/', "'{$val}'", $sql, 1);
66+
}
67+
68+
$log->log($level, $time . ' ' . $sql);
69+
} catch (\Exception $e) {
70+
// be quiet on error
71+
}
72+
});
73+
}
74+
}

0 commit comments

Comments
 (0)