Skip to content

Commit ecd4967

Browse files
committed
Refactoring and improvements to logger system for better dependency injection and testability
- Updated LoggerServiceProvider class to use dependency injection - Modified constructor to accept LoggerConfiguration, LoggerFactory, and LoggerRegistry instances - Removed static method calls, improving testability and flexibility - Refactored LoggerFactory class to be instantiable instead of static - Converted all static methods to instance methods - Improved createLogger method to support various handler and formatter configurations - Updated specialized logger creation methods (query, performance, error) to use instance methods - Refactored LoggerRegistry class to be instantiable instead of static - Converted static properties and methods to instance ones - Improved management of logger instances with private $loggers property - Updated initialization process for the logging system - Created instances of LoggerFactory and LoggerRegistry - Modified LoggerServiceProvider instantiation to inject dependencies - Updated logger retrieval process to use instance methods of LoggerRegistry
1 parent 4b2ab79 commit ecd4967

File tree

4 files changed

+77
-54
lines changed

4 files changed

+77
-54
lines changed

src/LoggerFactory.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
class LoggerFactory
1616
{
17-
public static function createLogger(string $name, array $config): Logger
17+
public function createLogger(string $name, array $config): Logger
1818
{
1919
$handlers = [];
2020
$processors = [];
@@ -61,22 +61,22 @@ public static function createLogger(string $name, array $config): Logger
6161
return new LoggerManager($name, $handlers, $processors, $formatter);
6262
}
6363

64-
public static function createQueryLogger(array $config): Logger
64+
public function createQueryLogger(array $config): Logger
6565
{
66-
return self::createLogger('query', $config);
66+
return $this->createLogger('query', $config);
6767
}
6868

69-
public static function createPerformanceLogger(array $config): Logger
69+
public function createPerformanceLogger(array $config): Logger
7070
{
71-
return self::createLogger('performance', $config);
71+
return $this->createLogger('performance', $config);
7272
}
7373

74-
public static function createErrorLogger(array $config): Logger
74+
public function createErrorLogger(array $config): Logger
7575
{
76-
return self::createLogger('error', $config);
76+
return $this->createLogger('error', $config);
7777
}
7878

79-
public static function createAsyncLogger(Logger $logger, int $batchSize): Logger
79+
public function createAsyncLogger(Logger $logger, int $batchSize): Logger
8080
{
8181
return new AsyncLogger($logger, $batchSize);
8282
}

src/LoggerRegistry.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@
88

99
class LoggerRegistry
1010
{
11-
private static array $loggers = [];
11+
private array $loggers = [];
1212

13-
public static function addLogger(string $name, Logger $logger): void
13+
public function addLogger(string $name, Logger $logger): void
1414
{
15-
self::$loggers[$name] = $logger;
15+
$this->loggers[$name] = $logger;
1616
}
1717

18-
public static function getLogger(string $name): ?Logger
18+
public function getLogger(string $name): ?Logger
1919
{
20-
return self::$loggers[$name] ?? null;
20+
return $this->loggers[$name] ?? null;
2121
}
2222

23-
public static function removeLogger(string $name): void
23+
public function removeLogger(string $name): void
2424
{
25-
unset(self::$loggers[$name]);
25+
unset($this->loggers[$name]);
2626
}
2727
}

src/Service/LoggerServiceProvider.php

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,53 +10,67 @@
1010

1111
class LoggerServiceProvider
1212
{
13-
public function register(LoggerConfiguration $config): void
13+
public function __construct(
14+
private LoggerConfiguration $config,
15+
private LoggerFactory $loggerFactory,
16+
private LoggerRegistry $loggerRegistry
17+
) {
18+
}
19+
20+
public function register(): void
21+
{
22+
$this->registerDefaultLoggers();
23+
$this->registerEmergencyLogger();
24+
$this->registerOptionalLoggers();
25+
}
26+
27+
private function registerDefaultLoggers(): void
1428
{
15-
$defaultChannel = $config->get('default');
16-
$channelsConfig = $config->get('channels', []);
29+
$defaultChannel = $this->config->get('default');
30+
$channelsConfig = $this->config->get('channels', []);
1731

1832
foreach ($channelsConfig as $channelName => $channelConfig) {
19-
$logger = LoggerFactory::createLogger($channelName, $channelConfig);
20-
LoggerRegistry::addLogger($channelName, $logger);
33+
$logger = $this->loggerFactory->createLogger($channelName, $channelConfig);
34+
$this->loggerRegistry->addLogger($channelName, $logger);
2135

2236
if ($channelName === $defaultChannel) {
23-
LoggerRegistry::addLogger('default', $logger);
37+
$this->loggerRegistry->addLogger('default', $logger);
2438
}
2539
}
40+
}
2641

27-
// Register emergency logger
28-
$emergencyLoggerConfig = $config->get('emergency_logger', []);
29-
$emergencyLogger = LoggerFactory::createLogger('emergency', $emergencyLoggerConfig);
30-
LoggerRegistry::addLogger('emergency', $emergencyLogger);
31-
32-
// Register query logger
33-
if ($config->get('query_logger.enabled', false)) {
34-
$queryLoggerConfig = $config->get('query_logger', []);
35-
$queryLogger = LoggerFactory::createQueryLogger($queryLoggerConfig);
36-
LoggerRegistry::addLogger('query', $queryLogger);
37-
}
42+
private function registerEmergencyLogger(): void
43+
{
44+
$emergencyLoggerConfig = $this->config->get('emergency_logger', []);
45+
$emergencyLogger = $this->loggerFactory->createLogger('emergency', $emergencyLoggerConfig);
46+
$this->loggerRegistry->addLogger('emergency', $emergencyLogger);
47+
}
3848

39-
// Register performance logger
40-
if ($config->get('performance_logger.enabled', false)) {
41-
$performanceLoggerConfig = $config->get('performance_logger', []);
42-
$performanceLogger = LoggerFactory::createPerformanceLogger($performanceLoggerConfig);
43-
LoggerRegistry::addLogger('performance', $performanceLogger);
44-
}
49+
private function registerOptionalLoggers(): void
50+
{
51+
$this->registerLoggerIfEnabled('query_logger', 'createQueryLogger');
52+
$this->registerLoggerIfEnabled('performance_logger', 'createPerformanceLogger');
53+
$this->registerLoggerIfEnabled('error_logger', 'createErrorLogger', true);
54+
$this->registerAsyncLoggerIfEnabled();
55+
}
4556

46-
// Register error logger
47-
if ($config->get('error_logger.enabled', true)) {
48-
$errorLoggerConfig = $config->get('error_logger', []);
49-
$errorLogger = LoggerFactory::createErrorLogger($errorLoggerConfig);
50-
LoggerRegistry::addLogger('error', $errorLogger);
57+
private function registerLoggerIfEnabled(string $configKey, string $factoryMethod, bool $defaultEnabled = false): void
58+
{
59+
if ($this->config->get("$configKey.enabled", $defaultEnabled)) {
60+
$loggerConfig = $this->config->get($configKey, []);
61+
$logger = $this->loggerFactory->$factoryMethod($loggerConfig);
62+
$this->loggerRegistry->addLogger(explode('_', $configKey)[0], $logger);
5163
}
64+
}
5265

53-
// Register async logger if enabled
54-
if ($config->get('async.enabled', true)) {
55-
$asyncLogger = LoggerFactory::createAsyncLogger(
56-
LoggerRegistry::getLogger('default'),
57-
(int) $config->get('async.batch_size', 10)
66+
private function registerAsyncLoggerIfEnabled(): void
67+
{
68+
if ($this->config->get('async.enabled', true)) {
69+
$asyncLogger = $this->loggerFactory->createAsyncLogger(
70+
$this->loggerRegistry->getLogger('default'),
71+
(int) $this->config->get('async.batch_size', 10)
5872
);
59-
LoggerRegistry::addLogger('async', $asyncLogger);
73+
$this->loggerRegistry->addLogger('async', $asyncLogger);
6074
}
6175
}
6276
}

tests/application.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require_once __DIR__ . '/../vendor/autoload.php';
44

55
use KaririCode\Logging\LoggerConfiguration;
6+
use KaririCode\Logging\LoggerFactory;
67
use KaririCode\Logging\LoggerRegistry;
78
use KaririCode\Logging\Service\LoggerServiceProvider;
89
use KaririCode\Logging\Util\ConfigHelper;
@@ -15,10 +16,18 @@
1516
$loggerConfig = new LoggerConfiguration();
1617
$loggerConfig->load($configPath);
1718

18-
$serviceProvider = new LoggerServiceProvider();
19-
$serviceProvider->register($loggerConfig);
2019

21-
$defaultLogger = LoggerRegistry::getLogger('console');
20+
$loggerFactory = new LoggerFactory();
21+
$loggerRegistry = new LoggerRegistry();
22+
$serviceProvider = new LoggerServiceProvider(
23+
$loggerConfig,
24+
$loggerFactory,
25+
$loggerRegistry
26+
);
27+
28+
$serviceProvider->register();
29+
30+
$defaultLogger = $loggerRegistry->getLogger('console');
2231
$defaultLogger->debug('This is a debug message', ['context' => 'debug']);
2332
$defaultLogger->info('This is an info message');
2433
$defaultLogger->notice('This is a notice message', ['context' => 'notice']);
@@ -28,14 +37,14 @@
2837
$defaultLogger->alert('This is an alert message', ['context' => 'alert']);
2938
$defaultLogger->emergency('This is an emergency message', ['context' => 'emergency']);
3039

31-
$asyncLogger = LoggerRegistry::getLogger('async');
40+
$asyncLogger = $loggerRegistry->getLogger('async');
3241
if ($asyncLogger) {
3342
for ($i = 0; $i < 2; ++$i) {
3443
$asyncLogger->info("Async log message {$i}", ['context' => "batch {$i}"]);
3544
}
3645
}
3746

38-
$queryLogger = LoggerRegistry::getLogger('query');
47+
$queryLogger = $loggerRegistry->getLogger('query');
3948
$queryLogger->info('Executing a query', ['query' => 'SELECT * FROM users', 'bindings' => [], 'time' => 150]);
4049

4150
// // Testa o performance logger

0 commit comments

Comments
 (0)