Compare commits
11 Commits
60cf8ad3cb
...
74b4bdaf99
Author | SHA1 | Date | |
---|---|---|---|
![]() |
74b4bdaf99 | ||
![]() |
c743240d63 | ||
![]() |
211ff1de4a | ||
![]() |
47556ce2fe | ||
![]() |
964ad6c681 | ||
![]() |
171d0c953f | ||
![]() |
1958c1da6c | ||
![]() |
f285567df8 | ||
![]() |
ac302f0b62 | ||
![]() |
9a469ad2ea | ||
![]() |
2a0b956382 |
|
@ -4,14 +4,14 @@
|
||||||
|
|
||||||
### 引入
|
### 引入
|
||||||
```bash
|
```bash
|
||||||
composer config repositories.lumen-sql-logger vcs git@git.int.haowumc.com:arch/lumen-sql-logger.git
|
composer config repositories.php-sql-logger vcs git@git.int.haowumc.com:composer/php-sql-logger.git
|
||||||
composer require --dev arch/lumen-sql-logger
|
composer require --dev paidian/php-sql-logger:dev-master
|
||||||
```
|
```
|
||||||
|
|
||||||
### 开启
|
### 开启
|
||||||
```php
|
```php
|
||||||
if (env('APP_ENV') == 'local') {
|
if (env('APP_ENV') == 'local') {
|
||||||
$app->register(Arch\EventServiceProvider::class);
|
$app->register(Arch\SQLEventServiceProvider::class);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "arch/lumen-sql-logger",
|
"name": "paidian/php-sql-logger",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "候学杰",
|
"name": "候学杰",
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Arch;
|
|
||||||
|
|
||||||
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
|
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The event listener mappings for the application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $listen = [
|
|
||||||
'Illuminate\Database\Events\QueryExecuted' => [
|
|
||||||
'Arch\Listeners\QueryListener',
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
namespace Arch\Listeners;
|
namespace Arch\Listeners;
|
||||||
|
|
||||||
|
use Arch\Logging\LogstashFormatter;
|
||||||
use Illuminate\Database\Events\QueryExecuted;
|
use Illuminate\Database\Events\QueryExecuted;
|
||||||
use Monolog\Formatter\LineFormatter;
|
use Monolog\Handler\StreamHandler;
|
||||||
use Monolog\Handler\RotatingFileHandler;
|
|
||||||
use Monolog\Logger;
|
use Monolog\Logger;
|
||||||
|
|
||||||
class QueryListener
|
class QueryListener
|
||||||
|
@ -20,9 +20,8 @@ class QueryListener
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->logger = new Logger(env('APP_NAME', 'APP_NAME'));
|
$this->logger = new Logger(env('APP_NAME', 'APP_NAME'));
|
||||||
$handler = new RotatingFileHandler(storage_path('/logs/sql.log'), 15);
|
$handler = new StreamHandler(storage_path('/logs/sql.log'));
|
||||||
$formatter = new LineFormatter(null, null, false, true);
|
$handler->setFormatter(new LogstashFormatter());
|
||||||
$handler->setFormatter($formatter);
|
|
||||||
$this->logger->pushHandler($handler);
|
$this->logger->pushHandler($handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,10 +35,8 @@ class QueryListener
|
||||||
{
|
{
|
||||||
if (env('APP_DEBUG')) {
|
if (env('APP_DEBUG')) {
|
||||||
$sql = str_replace("?", "'%s'", $event->sql);
|
$sql = str_replace("?", "'%s'", $event->sql);
|
||||||
$log = vsprintf($sql, $event->bindings);
|
$log = $event->bindings ? vsprintf($sql, $event->bindings) : $sql;
|
||||||
$requestId = app('request')->header('x-request-id','nginx_config_error');
|
$this->logger->debug($log, ['conn' => $event->connectionName, 'time' => $event->time.'ms']);
|
||||||
$text = "$requestId\t$log\t";
|
|
||||||
$this->logger->debug($text, ['conn' => $event->connectionName, 'time' => $event->time.'ms']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
48
src/Logging/LogstashFormatter.php
Normal file
48
src/Logging/LogstashFormatter.php
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: dongwei
|
||||||
|
* Date: 2019/1/10
|
||||||
|
* Time: 3:18 PM
|
||||||
|
*/
|
||||||
|
namespace Arch\Logging;
|
||||||
|
|
||||||
|
use Monolog\Formatter\NormalizerFormatter;
|
||||||
|
|
||||||
|
class LogstashFormatter extends NormalizerFormatter
|
||||||
|
{
|
||||||
|
protected $hostname;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// logstash requires a ISO 8601 format date with optional millisecond precision.
|
||||||
|
parent::__construct('Y-m-d\TH:i:s.uP');
|
||||||
|
|
||||||
|
$this->hostname = gethostname();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function format(array $record)
|
||||||
|
{
|
||||||
|
$record = parent::format($record);
|
||||||
|
$message = array(
|
||||||
|
'@timestamp' => $record['datetime'],
|
||||||
|
'host' => $this->hostname,
|
||||||
|
'app' => env('APP_NAME'),
|
||||||
|
);
|
||||||
|
|
||||||
|
$request_id = app('request')->header('X-Request-Id');
|
||||||
|
if ($request_id) {
|
||||||
|
$message['request_id'] = $request_id;
|
||||||
|
}
|
||||||
|
if (isset($record['message'])) {
|
||||||
|
$message['sql'] = $record['message'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($record['context'])) {
|
||||||
|
$message['conn'] =$record['context']['conn'];
|
||||||
|
$message['time'] =$record['context']['time'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->toJson($message) . "\n";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user