Skip to content

Commit ac52618

Browse files
authored
Merge pull request #191 from splitio/develop
Release 7.1.4
2 parents 4af4167 + 90fc5b4 commit ac52618

File tree

14 files changed

+143
-86
lines changed

14 files changed

+143
-86
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- 6379:6379
2020
strategy:
2121
matrix:
22-
version: ['7.3', '8.0']
22+
version: ['7.3', '8.0', '8.1']
2323
steps:
2424
- name: Checkout code
2525
uses: actions/checkout@v2

CHANGES.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
7.1.4 (Sep 6, 2022)
2+
- Updated dependencies to allow `psr/log` 2 and 3.
3+
- Removed `phpdocumentor/phpdocumentor` dependency.
4+
- Added `PSR3LoggerAdapter` to support `psr/log: 1 - 3` versions.
5+
16
7.1.3 (Aug 24, 2022)
27
- Updated `predis` dependency to `^2.0`.
38

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
This SDK is designed to work with Split, the platform for controlled rollouts, serving features to your users via the Split feature flag to manage your complete customer experience.
66

77
## Compatibility
8-
This SDK is compatible with PHP 5.6 and above.
8+
This SDK is compatible with PHP 7.3 and above.
99

1010
## Getting started
1111
Below is a simple example that describes the instantiation and most basic usage of our SDK.

composer.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@
2323

2424
"require": {
2525
"php": ">=7.3",
26-
"psr/log": "~1.0",
26+
"psr/log": "1 - 3",
2727
"predis/predis": "^2.0",
28-
"symfony/yaml": ">=5.3"
28+
"symfony/yaml": "^5.3|^6.0"
2929
},
3030

3131
"require-dev": {
3232
"phpunit/phpunit": "^9.0.0",
33-
"phpdocumentor/phpdocumentor": "3.*",
3433
"squizlabs/php_codesniffer": "3.*",
3534
"rogervila/php-sonarqube-scanner": "1.1.0"
3635
},

src/SplitIO/Component/Common/Di.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public static function get($key)
118118
/**
119119
* @param LoggerInterface $logger
120120
*/
121-
public static function setLogger(LoggerInterface $logger)
121+
public static function setLogger($logger)
122122
{
123123
self::set(self::KEY_LOG, $logger);
124124
}

src/SplitIO/Component/Common/ServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
class ServiceProvider
55
{
6-
public static function registerLogger(\Psr\Log\LoggerInterface $logger)
6+
public static function registerLogger($logger)
77
{
88
Di::setLogger($logger);
99
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
namespace SplitIO\Component\Initialization;
3+
4+
use Psr\Log\LogLevel;
5+
use SplitIO\Component\Log\Logger;
6+
use SplitIO\Component\Log\PSR3LoggerAdapter;
7+
use SplitIO\Component\Log\LogLevelEnum;
8+
use SplitIO\Component\Log\Handler\Echos;
9+
use SplitIO\Component\Log\Handler\Stdout;
10+
use SplitIO\Component\Log\Handler\Syslog;
11+
use SplitIO\Component\Log\Handler\VoidHandler;
12+
13+
class LoggerFactory
14+
{
15+
/**
16+
* Builds defaultLogger
17+
*
18+
* @param $options
19+
* @return SplitIO\Component\Log\Handler
20+
*/
21+
private static function buildAdapter(array $options)
22+
{
23+
$adapter = (isset($options['adapter'])) ? $options['adapter'] : null;
24+
25+
switch ($adapter) {
26+
case 'stdout':
27+
return new Stdout();
28+
29+
case 'echo':
30+
return new Echos();
31+
32+
case 'void':
33+
return new VoidHandler();
34+
35+
case 'syslog':
36+
default:
37+
return new Syslog();
38+
}
39+
}
40+
41+
/**
42+
* Builds logger
43+
*
44+
* @param $options
45+
* @return SplitIO\Component\Log\Logger
46+
*/
47+
public static function setupLogger(array $options)
48+
{
49+
$level = (isset($options['level'])) ? $options['level'] : null;
50+
if (!LogLevelEnum::isValid($level)) {
51+
$level = LogLevel::WARNING;
52+
}
53+
54+
if (!isset($options['psr3-instance'])) {
55+
return new Logger(self::buildAdapter($options), $level);
56+
}
57+
58+
return new Logger(new PSR3LoggerAdapter($options['psr3-instance']), $level);
59+
}
60+
}

src/SplitIO/Component/Initialization/LoggerTrait.php

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

src/SplitIO/Component/Log/Logger.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
* Implement PSR-3 interface
1212
* @package SplitIO\Component\Log
1313
*/
14-
class Logger extends LoggerTrait implements LoggerInterface
14+
class Logger extends LoggerTrait
1515
{
1616
/**
1717
* @var null|LogHandlerInterface
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
namespace SplitIO\Component\Log;
3+
4+
use Psr\Log\LoggerInterface;
5+
use SplitIO\Component\Log\Handler\LogHandlerInterface;
6+
7+
/**
8+
* Class PSR3LoggerAdapter
9+
* Logger Handler for PSR3
10+
* @package namespace SplitIO\Component\Log;
11+
*/
12+
class PSR3LoggerAdapter implements LogHandlerInterface
13+
{
14+
/**
15+
* @var LogHandlerInterface
16+
*/
17+
private $logger;
18+
19+
/**
20+
* Logger constructor
21+
* @param LoggerInterface $logger
22+
*/
23+
public function __construct(LoggerInterface $logger)
24+
{
25+
$this->logger = $logger;
26+
}
27+
28+
/**
29+
* Log messages for PSR3
30+
* @param $logLevel
31+
* @param $message
32+
*/
33+
public function write($logLevel, $message)
34+
{
35+
if (!is_string($message) || !$message instanceof Stringable) {
36+
try {
37+
$this->logger->log($logLevel, json_encode($message));
38+
} catch (\Exception $e) {
39+
$this->logger->log(
40+
LogLevel::ERROR,
41+
"error serializing non-stringable object when trying to log message of type " + gettype($message)
42+
);
43+
}
44+
} else {
45+
$this->logger->log($logLevel, $message);
46+
}
47+
}
48+
}

src/SplitIO/Sdk.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
namespace SplitIO;
33

44
use SplitIO\Component\Initialization\CacheTrait;
5-
use SplitIO\Component\Initialization\LoggerTrait;
5+
use SplitIO\Component\Initialization\LoggerFactory;
6+
use SplitIO\Component\Common\ServiceProvider;
67
use SplitIO\Exception\Exception;
78
use SplitIO\Sdk\Factory\LocalhostSplitFactory;
89
use SplitIO\Sdk\Factory\SplitFactory;
@@ -61,14 +62,8 @@ public static function factory($apiKey = 'localhost', array $options = array())
6162
*/
6263
private static function registerLogger(array $options)
6364
{
64-
if (isset($options['psr3-instance'])) {
65-
LoggerTrait::addLogger(null, null, $options['psr3-instance']);
66-
} else {
67-
$adapter = (isset($options['adapter'])) ? $options['adapter'] : null;
68-
$level = (isset($options['level'])) ? $options['level'] : null;
69-
70-
LoggerTrait::addLogger($adapter, $level);
71-
}
65+
$logger = LoggerFactory::setupLogger($options);
66+
ServiceProvider::registerLogger($logger);
7267
}
7368

7469
private static function registerCache(array $options)

src/SplitIO/Version.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33

44
class Version
55
{
6-
const CURRENT = '7.1.3';
6+
const CURRENT = '7.1.4';
77
}

tests/Suite/Engine/SplitterTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<?php
22
namespace SplitIO\Test\Suite\Engine;
33

4-
use SplitIO\Component\Initialization\LoggerTrait;
4+
use SplitIO\Component\Initialization\LoggerFactory;
5+
use SplitIO\Component\Common\ServiceProvider;
56
use SplitIO\Component\Log\LogLevelEnum;
67
use SplitIO\Engine\Splitter;
78
use SplitIO\Grammar\Condition\Partition;
@@ -15,7 +16,8 @@ class SplitterTest extends \PHPUnit\Framework\TestCase
1516

1617
public function testDiLog()
1718
{
18-
LoggerTrait::addLogger('stdout', LogLevelEnum::ERROR);
19+
$logger = LoggerFactory::setupLogger(array('adapter' => 'stdout', 'level' => 'error'));
20+
ServiceProvider::registerLogger($logger);
1921

2022
$this->assertTrue(true);
2123
}

tests/Suite/Sdk/SdkClientTest.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
namespace SplitIO\Test\Suite\Sdk;
33

44
use \stdClass;
5-
use Monolog\Logger;
6-
use Monolog\Handler\ErrorLogHandler;
75
use SplitIO\Component\Common\Di;
86
use SplitIO\Test\Suite\Redis\ReflectiveTools;
97
use SplitIO\Component\Cache\ImpressionCache;
@@ -14,6 +12,7 @@
1412
use SplitIO\Component\Cache\SplitCache;
1513
use SplitIO\Sdk\Client;
1614

15+
use SplitIO\Test\Suite\Sdk\Helpers\CustomLogger;
1716
use SplitIO\Test\Utils;
1817

1918
class SdkClientTest extends \PHPUnit\Framework\TestCase
@@ -427,8 +426,12 @@ public function testCustomLog()
427426
{
428427
Di::set(Di::KEY_FACTORY_TRACKER, false);
429428
// create a log channel
430-
$log = new Logger('SplitIO');
431-
$log->pushHandler(new ErrorLogHandler(ErrorLogHandler::OPERATING_SYSTEM, Logger::INFO));
429+
$log = $this
430+
->getMockBuilder('Psr\Log\LoggerInterface')
431+
->disableOriginalConstructor()
432+
->setMethods(array('warning', 'debug', 'error', 'info', 'critical', 'emergency',
433+
'alert', 'notice', 'write', 'log'))
434+
->getMock();
432435

433436
$parameters = array('scheme' => 'redis', 'host' => REDIS_HOST, 'port' => REDIS_PORT, 'timeout' => 881);
434437
$options = array('prefix' => TEST_PREFIX);
@@ -472,8 +475,13 @@ public function testInvalidCacheAdapter()
472475
public function testCacheExceptionReturnsControl()
473476
{
474477
Di::set(Di::KEY_FACTORY_TRACKER, false);
475-
$log = new Logger('SplitIO');
476-
$log->pushHandler(new ErrorLogHandler(ErrorLogHandler::OPERATING_SYSTEM, Logger::INFO));
478+
479+
$log = $this
480+
->getMockBuilder('Psr\Log\LoggerInterface')
481+
->disableOriginalConstructor()
482+
->setMethods(array('warning', 'debug', 'error', 'info', 'critical', 'emergency',
483+
'alert', 'notice', 'write', 'log'))
484+
->getMock();
477485

478486
$parameters = array('scheme' => 'redis', 'host' => REDIS_HOST, 'port' => REDIS_PORT, 'timeout' => 881);
479487
$options = array();

0 commit comments

Comments
 (0)