Skip to content

Commit d892ada

Browse files
Merge pull request #4 from joaojacome/master
Added a middleware processor, remove unnecessary code
2 parents 3269695 + 0574664 commit d892ada

20 files changed

+270
-283
lines changed

ContextualInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ interface ContextualInterface
1212
/**
1313
* Set the context for the logger
1414
*
15-
* @param array $context
15+
* @param mixed $context
1616
*
1717
* @return mixed
1818
*/
19-
public function setContext(array $context);
19+
public function setContext($context);
2020

2121
/**
2222
* Retrieve the context of this class

DependencyInjection/Configuration.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ public function getConfigTreeBuilder()
4040
->defaultFalse()
4141
->treatNullLike(false)
4242
->end()
43+
->arrayNode('middlewares')
44+
->info('List of middlewares to use')
45+
->prototype('scalar')
46+
->end()
47+
->treatNullLike([])
48+
->end()
4349
->booleanNode('enable_request_id')
4450
->info('Add a request identifier to all log entries. Allows for easier tracking of logs during a request')
4551
->defaultTrue()

DependencyInjection/OnelogExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public function load(array $configs, ContainerBuilder $container)
2727

2828
$container->setParameter('onelog.logger_service', $config['logger_service']);
2929
$container->setParameter('onelog.register_global', $config['register_global']);
30+
$container->setParameter('onelog.middlewares', $config['middlewares']);
3031
$container->setParameter('onelog.register_monolog_channels', $config['register_monolog_channels']);
3132
$container->setParameter('onelog.enable_request_id', $config['enable_request_id']);
3233
}

Helper/ContextualTrait.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace KoderHut\OnelogBundle\Helper;
44

5+
use KoderHut\OnelogBundle\ContextualInterface;
6+
57
/**
68
* Trait ContextualTrait
79
*
@@ -17,8 +19,14 @@ trait ContextualTrait
1719
/**
1820
* @inheritdoc
1921
*/
20-
public function setContext(array $context): self
22+
public function setContext($context): self
2123
{
24+
if (is_object($context) && $context instanceof ContextualInterface) {
25+
$context = $context->getContext();
26+
} else if (!is_array($context)) {
27+
throw new \InvalidArgumentException();
28+
}
29+
2230
$this->contextualData = $context;
2331

2432
return $this;

Middleware/ContextProcessor.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace KoderHut\OnelogBundle\Middleware;
4+
5+
use KoderHut\OnelogBundle\ContextualInterface;
6+
7+
/**
8+
* Class ContextProcessor
9+
*
10+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
11+
*/
12+
class ContextProcessor implements MiddlewareInterface
13+
{
14+
/**
15+
* @param string $level
16+
* @param mixed $message
17+
* @param array $context
18+
*
19+
* @return array
20+
*/
21+
public function process($level, $message, $context): array
22+
{
23+
if ($message instanceof ContextualInterface) {
24+
$context = array_merge($context, $message->getContext());
25+
}
26+
27+
return [$message, $context];
28+
}
29+
}

Middleware/ExceptionCodeProcessor.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace KoderHut\OnelogBundle\Middleware;
4+
5+
use KoderHut\OnelogBundle\ContextualInterface;
6+
7+
/**
8+
* Class ExceptionCodeProcessor
9+
*
10+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
11+
*/
12+
class ExceptionCodeProcessor implements MiddlewareInterface
13+
{
14+
/**
15+
* @param string $level
16+
* @param mixed $message
17+
* @param array $context
18+
*
19+
* @return array
20+
*/
21+
public function process($level, $message, $context): array
22+
{
23+
if ($message instanceof \Throwable) {
24+
$context = array_merge($context, [
25+
'code' => $message->getCode(),
26+
]);
27+
}
28+
29+
return [$message, $context];
30+
}
31+
}

Middleware/MiddlewareInterface.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace KoderHut\OnelogBundle\Middleware;
4+
5+
/**
6+
* Interface MiddlewareInterface
7+
*
8+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
9+
*/
10+
interface MiddlewareInterface
11+
{
12+
/**
13+
* @param string $level
14+
* @param mixed $message
15+
* @param array $context
16+
*
17+
* @return array
18+
*/
19+
public function process($level, $message, $context): array;
20+
}

Middleware/SimpleMessageProcessor.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace KoderHut\OnelogBundle\Middleware;
4+
5+
use KoderHut\OnelogBundle\ContextualInterface;
6+
7+
/**
8+
* Class SimpleMessageProcessor
9+
*
10+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
11+
*/
12+
class SimpleMessageProcessor implements MiddlewareInterface
13+
{
14+
/**
15+
* @param string $level
16+
* @param mixed $message
17+
* @param array $context
18+
*
19+
* @return array
20+
*/
21+
public function process($level, $message, $context): array
22+
{
23+
if ($message instanceof \Throwable) {
24+
$message = $message->getMessage();
25+
}
26+
27+
return [$message, $context];
28+
}
29+
}

Middleware/StackTraceProcessor.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace KoderHut\OnelogBundle\Middleware;
4+
5+
use KoderHut\OnelogBundle\ContextualInterface;
6+
use KoderHut\OnelogBundle\MiddlewareProcessor;
7+
8+
/**
9+
* Class StackTraceProcessor
10+
*
11+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
12+
*/
13+
class StackTraceProcessor implements MiddlewareInterface
14+
{
15+
/**
16+
* @param string $level
17+
* @param mixed $message
18+
* @param array $context
19+
*
20+
* @return array
21+
*/
22+
public function process($level, $message, $context): array
23+
{
24+
if ($message instanceof \Throwable) {
25+
$context = array_merge($context, [
26+
'stack_trace' => $message->getTraceAsString(),
27+
]);
28+
}
29+
30+
return [$message, $context];
31+
}
32+
}

MiddlewareProcessor.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace KoderHut\OnelogBundle;
4+
5+
use KoderHut\OnelogBundle\Middleware\MiddlewareInterface;
6+
7+
/**
8+
* Class MiddlewareProcessor
9+
*
10+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
11+
*/
12+
class MiddlewareProcessor implements MiddlewareInterface
13+
{
14+
/**
15+
* @var MiddlewareInterface[]
16+
*/
17+
private $middlewares = [];
18+
19+
/**
20+
* @param MiddlewareInterface $middleware
21+
*/
22+
public function registerMiddleware(MiddlewareInterface $middleware)
23+
{
24+
$this->middlewares[] = $middleware;
25+
}
26+
27+
/**
28+
* @param string $level
29+
* @param mixed $message
30+
* @param array $context
31+
*
32+
* @return array
33+
*/
34+
public function process($level, $message, $context): array
35+
{
36+
foreach ($this->middlewares as $middleware) {
37+
[$message, $context] = $middleware->process($level, $message, $context);
38+
}
39+
40+
return [$message, $context];
41+
}
42+
}

OneLog.php

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@
66
use KoderHut\OnelogBundle\Helper\NullLogger;
77
use Monolog\Logger;
88
use Psr\Log\LoggerInterface;
9+
use Psr\Log\LoggerTrait;
910

1011
/**
1112
* Class OneLog
1213
*
1314
* @author Denis-Florin Rendler <connect@rendler.me>
15+
* @author Joao Jacome <969041+joaojacome@users.noreply.github.com>
1416
*/
15-
class OneLog
17+
class OneLog implements LoggerInterface
1618
{
17-
use PSRLoggerTrait;
19+
use LoggerTrait;
1820

1921
public const DEFAULT_LOGGER = 'default';
2022

@@ -28,6 +30,11 @@ class OneLog
2830
*/
2931
private $loggers;
3032

33+
/**
34+
* @var MiddlewareProcessor
35+
*/
36+
private $middlewareProcessor;
37+
3138
/**
3239
* OneLog constructor.
3340
*
@@ -45,6 +52,14 @@ public function __construct(LoggerInterface $default = null, LoggerInterface ...
4552
}
4653
}
4754

55+
/**
56+
* @param MiddlewareProcessor $middlewareProcessor
57+
*/
58+
public function setMiddlewareProcessor(MiddlewareProcessor $middlewareProcessor)
59+
{
60+
$this->middlewareProcessor = $middlewareProcessor;
61+
}
62+
4863
/**
4964
* Retrieves a registered logger based on the logger name as a
5065
* public property of the class
@@ -88,4 +103,18 @@ public function registerLogger(LoggerInterface $logger, $name = null): void
88103

89104
$this->loggers[$loggerName] = $logger;
90105
}
106+
107+
/**
108+
* @param mixed $level
109+
* @param mixed $message
110+
* @param array $context
111+
*/
112+
public function log($level, $message, array $context = [])
113+
{
114+
if (null !== $this->middlewareProcessor) {
115+
[$message, $context] = $this->middlewareProcessor->process($level, $message, $context);
116+
}
117+
118+
$this->defaultLogger->log($level, $message, $context);
119+
}
91120
}

OnelogBundle.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
use KoderHut\OnelogBundle\DependencyInjection\Compiler\RegisterMonologChannels;
77
use KoderHut\OnelogBundle\DependencyInjection\Compiler\RequestIdentifierPass;
88
use KoderHut\OnelogBundle\Helper\GlobalNamespaceRegister;
9+
use KoderHut\OnelogBundle\Helper\OneLogStatic;
910
use Symfony\Component\DependencyInjection\ContainerBuilder;
1011
use Symfony\Component\HttpKernel\Bundle\Bundle;
11-
use KoderHut\OnelogBundle\Helper\OneLogStatic;
1212

1313
/**
1414
* Class KoderHut\OnelogBundle
@@ -24,6 +24,14 @@ public function boot()
2424
OneLogStatic::setInstance($onelogService);
2525
GlobalNamespaceRegister::register('\\OneLog', OneLogStatic::class);
2626
}
27+
28+
if (!empty($middlewares = $this->container->getParameter('onelog.middlewares'))) {
29+
$middlewareProcessor = $this->container->get(MiddlewareProcessor::class);
30+
foreach ($middlewares as $middleware) {
31+
$middlewareProcessor->registerMiddleware($this->container->get($middleware));
32+
}
33+
$this->container->get(OneLog::class)->setMiddlewareProcessor($middlewareProcessor);
34+
}
2735
}
2836

2937
public function build(ContainerBuilder $container)

0 commit comments

Comments
 (0)