Skip to content

Commit e5be82d

Browse files
author
Pavel Babushkin
authored
Merge pull request #11 from NBZ4live/feature/laravel-5.6
Implement new logging for Laravel/Lumen 5.6+
2 parents 198a25a + d91348d commit e5be82d

File tree

5 files changed

+93
-13
lines changed

5 files changed

+93
-13
lines changed

config/jsonrpc.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,13 @@
8888
/**
8989
* Настройки логгирования
9090
*/
91-
'log_max_files' => 10,
92-
'log_path' => 'logs/jsonrpc/activity.log',
91+
'logging_channel' => [
92+
'name' => 'JsonRpc',
93+
'tap' => [\Tochka\JsonRpc\Log\CustomizeLogger::class],
94+
'driver' => 'daily',
95+
'level' => 'debug',
96+
'path' => storage_path('logs/jsonrpc/activity.log'),
97+
'days' => 10,
98+
],
9399

94100
];

src/JsonRpcServiceProvider.php

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
namespace Tochka\JsonRpc;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Log\LogManager;
67
use Illuminate\Support\Facades\Route;
78
use Illuminate\Support\ServiceProvider;
9+
use Psr\Log\LoggerInterface;
810
use Tochka\JsonRpc\Exceptions\JsonRpcHandler;
11+
use Tochka\JsonRpc\Log\Writer as JsonRpcLogWriter;
912

1013
class JsonRpcServiceProvider extends ServiceProvider
1114
{
@@ -19,8 +22,7 @@ public function register()
1922
// Необходимая вещь
2023
$this->app->instance('JsonRpcRequest', new JsonRpcRequest(new \StdClass, []));
2124

22-
// Кастомный логгер для api
23-
$this->app->instance('JsonRpcLog', (new JsonRpcLogWriter())->createLogger());
25+
$this->registerLogger();
2426

2527
// Сервер JsonRpc
2628
$this->app->singleton('JsonRpcServer', function () {
@@ -47,6 +49,33 @@ public function boot()
4749
$this->publishes([__DIR__ . '/../config/jsonrpc.php' => config_path('jsonrpc.php')]);
4850
}
4951

52+
/**
53+
* Register a custom logger instance for the api.
54+
*/
55+
protected function registerLogger()
56+
{
57+
if (version_compare($this->getAppVersion(), '5.6', '>=')) {
58+
/** @var LogManager $logManager */
59+
$logManager = $this->app->make(LoggerInterface::class);
60+
61+
$channelConfig = $this->app['config']->get('jsonrpc.logging_channel', [
62+
'name' => 'JsonRpc',
63+
'tap' => [\Tochka\JsonRpc\Log\CustomizeLogger::class],
64+
'driver' => 'daily',
65+
'level' => 'debug',
66+
'path' => \storage_path('logs/jsonrpc/activity.log'),
67+
'days' => 10,
68+
]);
69+
70+
$this->app['config']->set('logging.channels.jsonrpc', $channelConfig);
71+
72+
$this->app->instance('JsonRpcLog', $logManager->channel('jsonrpc'));
73+
return;
74+
}
75+
76+
$this->app->instance('JsonRpcLog', (new JsonRpcLogWriter())->createLogger());
77+
}
78+
5079
protected function loadRoutes()
5180
{
5281
$routes = config('jsonrpc.routes', []);
@@ -93,4 +122,17 @@ function (Request $request, JsonRpcServer $server, $endpoint = null, $action = n
93122
}
94123
}
95124

125+
/**
126+
* Get the version number of the application.
127+
*
128+
* @return string
129+
*/
130+
protected function getAppVersion()
131+
{
132+
$version = $this->app->version();
133+
if (substr($version, 0, 7) === 'Lumen (') {
134+
$version = array_first(explode(')', str_replace('Lumen (', '', $version)));
135+
}
136+
return $version;
137+
}
96138
}

src/Log/CustomizeLogger.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace Tochka\JsonRpc\Log;
4+
5+
use Monolog\Formatter\LineFormatter;
6+
use Monolog\Handler\HandlerInterface;
7+
use Monolog\Processor\MemoryUsageProcessor;
8+
use Psr\Log\LoggerInterface;
9+
10+
/**
11+
* Class CustomizeLogger
12+
* @package Tochka\JsonRpc\Log
13+
*/
14+
class CustomizeLogger
15+
{
16+
17+
const LINE_FORMAT = "[%datetime%] %level_name%: %message% %context% %extra%\n";
18+
19+
/**
20+
* Customize the given logger instance.
21+
*
22+
* @param LoggerInterface $logger
23+
* @return void
24+
*/
25+
public function __invoke(LoggerInterface $logger)
26+
{
27+
/** @var HandlerInterface $handler */
28+
foreach ($logger->getHandlers() as $handler) {
29+
$handler->setFormatter(new LineFormatter(static::LINE_FORMAT, null, true, true));
30+
}
31+
32+
$logger->pushProcessor(new JsonRpcProcessor());
33+
$logger->pushProcessor(new MemoryUsageProcessor());
34+
}
35+
}

src/JsonRpcProcessor.php renamed to src/Log/JsonRpcProcessor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Tochka\JsonRpc;
3+
namespace Tochka\JsonRpc\Log;
44

55
use Monolog\Processor\WebProcessor;
66

src/JsonRpcLogWriter.php renamed to src/Log/Writer.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<?php
22

3-
namespace Tochka\JsonRpc;
3+
namespace Tochka\JsonRpc\Log;
44

5-
use Illuminate\Log\Writer;
65
use Monolog\Formatter\LineFormatter;
76
use Monolog\Handler\RotatingFileHandler;
87
use Monolog\Logger as Monolog;
@@ -12,11 +11,9 @@
1211
* Class ApiLogWriter
1312
* @package App\Logger
1413
*/
15-
class JsonRpcLogWriter extends Writer
14+
class Writer extends \Illuminate\Log\Writer
1615
{
1716

18-
const LINE_FORMAT = "[%datetime%] %level_name%: %message% %context% %extra%\n";
19-
2017
public $log;
2118

2219
public function __construct()
@@ -31,11 +28,11 @@ public function __construct()
3128
*/
3229
public function createLogger()
3330
{
34-
$path = storage_path(config('jsonrpc.log_path', 'logs/jsonrpc/activity.log'));
35-
$numOfKeepFiles = config('jsonrpc.log_max_files', 10);
31+
$path = config('jsonrpc.logging_channel.path', storage_path('logs/jsonrpc/activity.log'));
32+
$numOfKeepFiles = config('jsonrpc.logging_channel.days', 10);
3633

3734
$handler = new RotatingFileHandler($path, $numOfKeepFiles, $this->parseLevel('debug'), true, 0775);
38-
$handler->setFormatter(new LineFormatter(static::LINE_FORMAT, null, true, true));
35+
$handler->setFormatter(new LineFormatter(CustomizeLogger::LINE_FORMAT, null, true, true));
3936

4037
$this->log->pushHandler($handler);
4138
$this->log->pushProcessor(new JsonRpcProcessor());

0 commit comments

Comments
 (0)