Skip to content

Commit e362f20

Browse files
committed
Merge branch 'abstract-logger' into 'master'
Logger abstract implementation See merge request head.trackingsoft/micro-plugin-logger!1
2 parents b2d9734 + 28ed18f commit e362f20

10 files changed

+154
-69
lines changed

composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "micro/plugin-logger",
2+
"name": "micro/plugin-logger-core",
33
"description": "Micro Framework: Logger plugin",
44
"type": "library",
55
"version": "0.1",
@@ -17,6 +17,7 @@
1717
],
1818
"minimum-stability": "stable",
1919
"require": {
20-
"monolog/monolog": "2.3.*"
20+
"php": ">=8.0",
21+
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
2122
}
2223
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Logger\Business\Factory;
4+
5+
use Psr\Log\LoggerInterface;
6+
7+
interface LoggerFactoryInterface
8+
{
9+
/**
10+
* @param string $loggerName
11+
*
12+
* @return LoggerInterface
13+
*/
14+
public function create(string $loggerName): LoggerInterface;
15+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Logger\Business\Provider;
4+
5+
use Micro\Plugin\Logger\Business\Factory\LoggerFactoryInterface;
6+
use Psr\Log\LoggerInterface;
7+
8+
class LoggerProvider implements LoggerProviderInterface
9+
{
10+
/**
11+
* @var array<string, LoggerInterface>
12+
*/
13+
private array $loggerCollection;
14+
15+
/**
16+
* @param LoggerFactoryInterface $loggerFactory
17+
*/
18+
public function __construct(private LoggerFactoryInterface $loggerFactory)
19+
{
20+
$this->loggerCollection = [];
21+
}
22+
23+
/**
24+
* {@inheritDoc}
25+
*/
26+
public function getLogger(string $loggerName): LoggerInterface
27+
{
28+
if(!array_key_exists($loggerName, $this->loggerCollection)) {
29+
$this->loggerCollection[$loggerName] = $this->loggerFactory->create($loggerName);
30+
}
31+
32+
return $this->loggerCollection[$loggerName];
33+
}
34+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Logger\Business\Provider;
4+
5+
use Psr\Log\LoggerInterface;
6+
7+
interface LoggerProviderInterface
8+
{
9+
/**
10+
* @param string $loggerName
11+
*
12+
* @return LoggerInterface
13+
*/
14+
public function getLogger(string $loggerName): LoggerInterface;
15+
}

src/Impl/LoggerFactory.php

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/LoggerFacade.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Logger;
4+
5+
use Micro\Plugin\Logger\Business\Provider\LoggerProviderInterface;
6+
use Psr\Log\LoggerInterface;
7+
8+
class LoggerFacade implements LoggerFacadeInterface
9+
{
10+
/**
11+
* @param LoggerProviderInterface $loggerProvider
12+
*/
13+
public function __construct(private LoggerProviderInterface $loggerProvider)
14+
{
15+
}
16+
17+
/**
18+
* @param string $logger
19+
*
20+
* @return LoggerInterface
21+
*/
22+
public function getLogger(string $logger = self::LOGGER_DEFAULT): LoggerInterface
23+
{
24+
return $this->loggerProvider->getLogger($logger);
25+
}
26+
}

src/LoggerFacadeInterface.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Logger;
4+
5+
use Psr\Log\LoggerInterface;
6+
7+
interface LoggerFacadeInterface
8+
{
9+
public const LOGGER_DEFAULT = 'default';
10+
11+
/**
12+
* @param string $logger
13+
* @return LoggerInterface
14+
*/
15+
public function getLogger(string $logger = self::LOGGER_DEFAULT): LoggerInterface;
16+
}

src/LoggerFactoryInterface.php

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/LoggerPlugin.php

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,60 @@
44

55
use Micro\Component\DependencyInjection\Container;
66
use Micro\Framework\Kernel\Plugin\AbstractPlugin;
7-
use Micro\Plugin\Logger\Impl\LoggerFactory;
8-
use \Closure;
7+
use Micro\Plugin\Logger\Business\Factory\LoggerFactory;
8+
use Micro\Plugin\Logger\Business\Factory\LoggerFactoryInterface;
9+
use Micro\Plugin\Logger\Business\Provider\LoggerProvider;
10+
use Micro\Plugin\Logger\Business\Provider\LoggerProviderInterface;
911

10-
class LoggerPlugin extends AbstractPlugin
12+
abstract class LoggerPlugin extends AbstractPlugin
1113
{
12-
public const SERVICE_LOGGER = 'logger';
14+
/**
15+
* @var LoggerProviderInterface|null
16+
*/
17+
private ?LoggerProviderInterface $loggerProvider = null;
1318

1419
/**
1520
* {@inheritDoc}
1621
*/
1722
public function provideDependencies(Container $container): void
1823
{
19-
$container->register(self::SERVICE_LOGGER, $this->createLoggerServiceCallback());
24+
$container->register(LoggerFacadeInterface::class, function (Container $container) {
25+
return $this->createLoggerFacade();
26+
});
2027
}
2128

2229
/**
23-
* @return Closure
30+
* @return LoggerProviderInterface
2431
*/
25-
private function createLoggerServiceCallback(): Closure
32+
protected function getLoggerProvider(): LoggerProviderInterface
2633
{
27-
return function (Container $container)
28-
{
29-
return $this->createLoggerFactory()->create();
30-
};
34+
if(!$this->loggerProvider) {
35+
$this->loggerProvider = $this->createLoggerProvider();
36+
}
37+
38+
return $this->loggerProvider;
3139
}
3240

3341
/**
34-
* @return LoggerFactoryInterface
42+
* @return LoggerProviderInterface
3543
*/
36-
private function createLoggerFactory(): LoggerFactoryInterface
44+
protected function createLoggerProvider(): LoggerProviderInterface
3745
{
38-
return new LoggerFactory($this->configuration);
46+
return new LoggerProvider(
47+
$this->createLoggerFactory()
48+
);
3949
}
50+
51+
/**
52+
* @return LoggerFacadeInterface
53+
*/
54+
protected function createLoggerFacade(): LoggerFacadeInterface
55+
{
56+
return new LoggerFacade($this->getLoggerProvider());
57+
}
58+
59+
/**
60+
* @return LoggerFactoryInterface
61+
*/
62+
abstract protected function createLoggerFactory(): LoggerFactoryInterface;
4063
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Micro\Plugin\Logger;
4+
5+
interface LoggerPluginConfigurationInterface
6+
{
7+
8+
}

0 commit comments

Comments
 (0)