Skip to content

Commit 00f86ee

Browse files
author
Greg Bowler
committed
test: add handlers for different levels
1 parent b0da8aa commit 00f86ee

File tree

3 files changed

+91
-5
lines changed

3 files changed

+91
-5
lines changed

src/LogConfig.php

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,35 @@
55
use Gt\Logger\LogHandler\StdOutHandler;
66

77
class LogConfig {
8-
/** @var LogHandler[] */
9-
private static array $handlers;
8+
/** @var array<LogHandler> */
9+
private static array $handlers = [];
10+
/** @var array<string> */
11+
private static array $handlerLevels = [];
12+
1013
private static StdOutHandler $defaultHandler;
14+
private static string $defaultHandlerLevel = LogLevel::DEBUG;
1115

1216
/** @return LogHandler[] */
13-
public static function getHandlers():array {
17+
public static function getHandlers(
18+
string $logLevel = LogLevel::DEBUG
19+
):array {
1420
self::ensureAtLeastOneHandler();
15-
return self::$handlers;
21+
$logLevel = strtoupper($logLevel);
22+
$logLevelIndex = array_flip(LogLevel::ALL_LEVELS)[$logLevel];
23+
24+
$handlerArray = [];
25+
foreach(self::$handlers as $i => $handler) {
26+
$handlerLevel = strtoupper(self::$handlerLevels[$i]);
27+
$handlerLevelIndex = array_flip(LogLevel::ALL_LEVELS)[$handlerLevel];
28+
29+
if($handlerLevelIndex < $logLevelIndex) {
30+
continue;
31+
}
32+
33+
array_push($handlerArray, $handler);
34+
}
35+
36+
return $handlerArray;
1637
}
1738

1839
public static function getDefaultHandler():StdOutHandler {
@@ -23,13 +44,23 @@ public static function getDefaultHandler():StdOutHandler {
2344
return self::$defaultHandler;
2445
}
2546

47+
public static function addHandler(LogHandler $handler, string $logLevel = null):void {
48+
array_push(self::$handlers, $handler);
49+
array_push(self::$handlerLevels, $logLevel ?? self::$defaultHandlerLevel);
50+
}
51+
2652
private static function ensureAtLeastOneHandler():void {
2753
if(!isset(self::$handlers)) {
2854
self::$handlers = array();
2955
array_push(
3056
self::$handlers,
3157
self::getDefaultHandler()
3258
);
59+
self::$handlerLevels = array();
60+
array_push(
61+
self::$handlerLevels,
62+
self::$defaultHandlerLevel
63+
);
3364
}
3465
}
35-
}
66+
}

src/LogHandler/StreamHandler.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
namespace Gt\Logger\LogHandler;
3+
4+
/**
5+
* As a file handler can easily open and write to a stream, this class currently
6+
* has no functionality of its own, but it's been stubbed out here to make it
7+
* easy in the future to add features such as stream filters and sockets.
8+
*/
9+
class StreamHandler extends FileHandler {
10+
}

test/phpunit/LogConfigTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
namespace Gt\Logger\Test;
3+
4+
use _HumbugBox373c0874430e\Psr\Log\LogLevel;
5+
use Gt\Logger\LogConfig;
6+
use Gt\Logger\LogHandler\FileHandler;
7+
use Gt\Logger\LogHandler\StdOutHandler;
8+
use PHPUnit\Framework\TestCase;
9+
10+
class LogConfigTest extends TestCase {
11+
public function testGetHandlers_returnsDefaultWhenEmpty():void {
12+
$handlerList = LogConfig::getHandlers();
13+
self::assertCount(1, $handlerList);
14+
self::assertInstanceOf(StdOutHandler::class, $handlerList[0]);
15+
}
16+
17+
public function testGetHandlers_multipleAdded():void {
18+
$handler1 = self::createMock(FileHandler::class);
19+
$handler2 = self::createMock(FileHandler::class);
20+
$handler3 = self::createMock(FileHandler::class);
21+
LogConfig::addHandler($handler1);
22+
LogConfig::addHandler($handler2);
23+
LogConfig::addHandler($handler3);
24+
25+
self::assertCount(3, LogConfig::getHandlers());
26+
}
27+
28+
public function testGetHandlers_addWithDifferentLevels():void {
29+
$handler1 = self::createMock(FileHandler::class);
30+
$handler2 = self::createMock(FileHandler::class);
31+
$handler3 = self::createMock(FileHandler::class);
32+
LogConfig::addHandler($handler1, LogLevel::ERROR);
33+
LogConfig::addHandler($handler2, LogLevel::DEBUG);
34+
LogConfig::addHandler($handler3, LogLevel::EMERGENCY);
35+
36+
$handlersAll = LogConfig::getHandlers();
37+
$handlersDebug = LogConfig::getHandlers(LogLevel::DEBUG);
38+
$handlersError = LogConfig::getHandlers(LogLevel::ERROR);
39+
$handlersEmergency = LogConfig::getHandlers(LogLevel::EMERGENCY);
40+
self::assertCount(3, $handlersAll);
41+
self::assertCount(3, $handlersDebug);
42+
self::assertCount(2, $handlersError);
43+
self::assertCount(1, $handlersEmergency);
44+
}
45+
}

0 commit comments

Comments
 (0)