-
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Added support of roadrunner logger handler
- Loading branch information
1 parent
0310537
commit 3f5b0dd
Showing
7 changed files
with
296 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Spiral\RoadRunnerBridge\Bootloader; | ||
|
||
use Spiral\Boot\Bootloader\Bootloader; | ||
use Spiral\Boot\EnvironmentInterface; | ||
use Spiral\Monolog\Bootloader\MonologBootloader; | ||
use RoadRunner\Logger\Logger; | ||
use Spiral\RoadRunnerBridge\Logger\Handler; | ||
|
||
final class LoggerBootloader extends Bootloader | ||
{ | ||
protected const DEPENDENCIES = [ | ||
MonologBootloader::class | ||
]; | ||
|
||
protected const SINGLETONS = [ | ||
Handler::class => [self::class, 'initHandler'] | ||
]; | ||
|
||
private function initHandler(Logger $logger, EnvironmentInterface $env): Handler | ||
{ | ||
return new Handler($logger, $env->get('LOGGER_FORMAT', Handler::FORMAT)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Spiral\RoadRunnerBridge\Logger; | ||
|
||
use Monolog\Formatter\FormatterInterface; | ||
use Monolog\Formatter\LineFormatter; | ||
use Monolog\Handler\AbstractProcessingHandler; | ||
use Monolog\Logger; | ||
use RoadRunner\Logger\Logger as RoadRunnerLogger; | ||
|
||
class Handler extends AbstractProcessingHandler | ||
{ | ||
public const FORMAT = "%message% %context% %extra%\n"; | ||
|
||
public function __construct( | ||
private readonly RoadRunnerLogger $logger, | ||
string|FormatterInterface $formatter = self::FORMAT | ||
) { | ||
parent::__construct(); | ||
|
||
if (\is_string($formatter)) { | ||
$formatter = new LineFormatter($formatter); | ||
} | ||
|
||
$this->setFormatter($formatter); | ||
} | ||
|
||
protected function write(array $record): void | ||
{ | ||
$message = $record['formatted']; | ||
|
||
match ($record['level']) { | ||
Logger::ERROR, Logger::CRITICAL => $this->logger->error($message), | ||
Logger::WARNING, Logger::ALERT, Logger::EMERGENCY => $this->logger->warning($message), | ||
Logger::INFO, Logger::NOTICE => $this->logger->info($message), | ||
Logger::DEBUG => $this->logger->debug($message), | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Spiral\Tests\Bootloader; | ||
|
||
use Spiral\RoadRunnerBridge\Logger\Handler; | ||
use Spiral\Tests\TestCase; | ||
|
||
final class LoggerBootloaderTest extends TestCase | ||
{ | ||
public function testHandlerBinding(): void | ||
{ | ||
$this->assertContainerBoundAsSingleton(Handler::class, Handler::class); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Spiral\Tests\Logger; | ||
|
||
use Psr\Log\LoggerInterface; | ||
use RoadRunner\Logger\Logger; | ||
use Spiral\Goridge\RPC\RPCInterface; | ||
use Spiral\RoadRunnerBridge\Logger\Handler; | ||
use Spiral\Tests\TestCase; | ||
use Mockery as m; | ||
use Monolog\Logger as Monolog; | ||
|
||
final class HandlerTest extends TestCase | ||
{ | ||
/** | ||
* @dataProvider provideLogData | ||
*/ | ||
public function testSendLog($expectedResult, $input): void | ||
{ | ||
$rpc = m::mock(RPCInterface::class); | ||
|
||
$rpc->shouldReceive('withServicePrefix')->once()->with('app')->andReturnSelf(); | ||
|
||
$monolog = new Monolog('default'); | ||
$monolog->setHandlers([ | ||
new Handler( | ||
new Logger($rpc), | ||
"%message% foo" | ||
), | ||
]); | ||
|
||
$rpc->shouldReceive('call') | ||
->once() | ||
->with($expectedResult['level'], $expectedResult['message']) | ||
->andReturnSelf(); | ||
|
||
$method = $input['method']; | ||
|
||
$monolog->$method($input['message']); | ||
} | ||
|
||
public function provideLogData(): array | ||
{ | ||
return [ | ||
[ | ||
[ | ||
'level' => 'Error', | ||
'message' => 'Error message foo', | ||
], | ||
[ | ||
'method' => 'error', | ||
'message' => 'Error message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Warning', | ||
'message' => 'Warning message foo', | ||
], | ||
[ | ||
'method' => 'warning', | ||
'message' => 'Warning message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Info', | ||
'message' => 'Info message foo', | ||
], | ||
[ | ||
'method' => 'info', | ||
'message' => 'Info message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Debug', | ||
'message' => 'Debug message foo', | ||
], | ||
[ | ||
'method' => 'debug', | ||
'message' => 'Debug message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Warning', | ||
'message' => 'Emergency message foo', | ||
], | ||
[ | ||
'method' => 'emergency', | ||
'message' => 'Emergency message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Warning', | ||
'message' => 'Alert message foo', | ||
], | ||
[ | ||
'method' => 'alert', | ||
'message' => 'Alert message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Error', | ||
'message' => 'Critical message foo', | ||
], | ||
[ | ||
'method' => 'critical', | ||
'message' => 'Critical message', | ||
], | ||
], | ||
[ | ||
[ | ||
'level' => 'Info', | ||
'message' => 'Notice message foo', | ||
], | ||
[ | ||
'method' => 'notice', | ||
'message' => 'Notice message', | ||
], | ||
], | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters