From 8beb7546e5f563f30f3cff139b88e5dd512bed34 Mon Sep 17 00:00:00 2001 From: Larry Garfield Date: Fri, 4 Jun 2021 11:40:16 -0500 Subject: [PATCH 1/6] Remove outdated test files. --- Psr/Log/Test/DummyTest.php | 18 ---- Psr/Log/Test/LoggerInterfaceTest.php | 138 ------------------------- Psr/Log/Test/TestLogger.php | 147 --------------------------- 3 files changed, 303 deletions(-) delete mode 100644 Psr/Log/Test/DummyTest.php delete mode 100644 Psr/Log/Test/LoggerInterfaceTest.php delete mode 100644 Psr/Log/Test/TestLogger.php diff --git a/Psr/Log/Test/DummyTest.php b/Psr/Log/Test/DummyTest.php deleted file mode 100644 index 9638c11..0000000 --- a/Psr/Log/Test/DummyTest.php +++ /dev/null @@ -1,18 +0,0 @@ - ". - * - * Example ->error('Foo') would yield "error Foo". - * - * @return string[] - */ - abstract public function getLogs(); - - public function testImplements() - { - $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); - } - - /** - * @dataProvider provideLevelsAndMessages - */ - public function testLogsAtAllLevels($level, $message) - { - $logger = $this->getLogger(); - $logger->{$level}($message, array('user' => 'Bob')); - $logger->log($level, $message, array('user' => 'Bob')); - - $expected = array( - $level.' message of level '.$level.' with context: Bob', - $level.' message of level '.$level.' with context: Bob', - ); - $this->assertEquals($expected, $this->getLogs()); - } - - public function provideLevelsAndMessages() - { - return array( - LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), - LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), - LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), - LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), - LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), - LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), - LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), - LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), - ); - } - - /** - * @expectedException \Psr\Log\InvalidArgumentException - */ - public function testThrowsOnInvalidLevel() - { - $logger = $this->getLogger(); - $logger->log('invalid level', 'Foo'); - } - - public function testContextReplacement() - { - $logger = $this->getLogger(); - $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); - - $expected = array('info {Message {nothing} Bob Bar a}'); - $this->assertEquals($expected, $this->getLogs()); - } - - public function testObjectCastToString() - { - if (method_exists($this, 'createPartialMock')) { - $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); - } else { - $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); - } - $dummy->expects($this->once()) - ->method('__toString') - ->will($this->returnValue('DUMMY')); - - $this->getLogger()->warning($dummy); - - $expected = array('warning DUMMY'); - $this->assertEquals($expected, $this->getLogs()); - } - - public function testContextCanContainAnything() - { - $closed = fopen('php://memory', 'r'); - fclose($closed); - - $context = array( - 'bool' => true, - 'null' => null, - 'string' => 'Foo', - 'int' => 0, - 'float' => 0.5, - 'nested' => array('with object' => new DummyTest), - 'object' => new \DateTime, - 'resource' => fopen('php://memory', 'r'), - 'closed' => $closed, - ); - - $this->getLogger()->warning('Crazy context data', $context); - - $expected = array('warning Crazy context data'); - $this->assertEquals($expected, $this->getLogs()); - } - - public function testContextExceptionKeyCanBeExceptionOrOtherValues() - { - $logger = $this->getLogger(); - $logger->warning('Random message', array('exception' => 'oops')); - $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); - - $expected = array( - 'warning Random message', - 'critical Uncaught Exception!' - ); - $this->assertEquals($expected, $this->getLogs()); - } -} diff --git a/Psr/Log/Test/TestLogger.php b/Psr/Log/Test/TestLogger.php deleted file mode 100644 index 1be3230..0000000 --- a/Psr/Log/Test/TestLogger.php +++ /dev/null @@ -1,147 +0,0 @@ - $level, - 'message' => $message, - 'context' => $context, - ]; - - $this->recordsByLevel[$record['level']][] = $record; - $this->records[] = $record; - } - - public function hasRecords($level) - { - return isset($this->recordsByLevel[$level]); - } - - public function hasRecord($record, $level) - { - if (is_string($record)) { - $record = ['message' => $record]; - } - return $this->hasRecordThatPasses(function ($rec) use ($record) { - if ($rec['message'] !== $record['message']) { - return false; - } - if (isset($record['context']) && $rec['context'] !== $record['context']) { - return false; - } - return true; - }, $level); - } - - public function hasRecordThatContains($message, $level) - { - return $this->hasRecordThatPasses(function ($rec) use ($message) { - return strpos($rec['message'], $message) !== false; - }, $level); - } - - public function hasRecordThatMatches($regex, $level) - { - return $this->hasRecordThatPasses(function ($rec) use ($regex) { - return preg_match($regex, $rec['message']) > 0; - }, $level); - } - - public function hasRecordThatPasses(callable $predicate, $level) - { - if (!isset($this->recordsByLevel[$level])) { - return false; - } - foreach ($this->recordsByLevel[$level] as $i => $rec) { - if (call_user_func($predicate, $rec, $i)) { - return true; - } - } - return false; - } - - public function __call($method, $args) - { - if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { - $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; - $level = strtolower($matches[2]); - if (method_exists($this, $genericMethod)) { - $args[] = $level; - return call_user_func_array([$this, $genericMethod], $args); - } - } - throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); - } - - public function reset() - { - $this->records = []; - $this->recordsByLevel = []; - } -} From 4165cf6c29d0b7f34807590b2718caf483e8b1f7 Mon Sep 17 00:00:00 2001 From: Larry Garfield Date: Fri, 4 Jun 2021 11:54:46 -0500 Subject: [PATCH 2/6] Require PHP 8.0 for Stringable support. --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index ca05695..0f1505c 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "autoload": { "psr-4": { @@ -20,7 +20,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } } } From ce57d91bc60d908d432ab22d276619789d1d908d Mon Sep 17 00:00:00 2001 From: Larry Garfield Date: Fri, 4 Jun 2021 11:55:54 -0500 Subject: [PATCH 3/6] Add parameter types. --- Psr/Log/AbstractLogger.php | 32 ++++++++++++++++---------------- Psr/Log/LoggerInterface.php | 36 ++++++++++++++++++------------------ Psr/Log/LoggerTrait.php | 36 ++++++++++++++++++------------------ Psr/Log/NullLogger.php | 6 +++--- 4 files changed, 55 insertions(+), 55 deletions(-) diff --git a/Psr/Log/AbstractLogger.php b/Psr/Log/AbstractLogger.php index e02f9da..bda4a37 100644 --- a/Psr/Log/AbstractLogger.php +++ b/Psr/Log/AbstractLogger.php @@ -14,12 +14,12 @@ abstract class AbstractLogger implements LoggerInterface /** * System is unusable. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function emergency($message, array $context = array()) + public function emergency(string|\Stringable $message, array $context = []) { $this->log(LogLevel::EMERGENCY, $message, $context); } @@ -30,12 +30,12 @@ public function emergency($message, array $context = array()) * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function alert($message, array $context = array()) + public function alert(string|\Stringable $message, array $context = []) { $this->log(LogLevel::ALERT, $message, $context); } @@ -45,12 +45,12 @@ public function alert($message, array $context = array()) * * Example: Application component unavailable, unexpected exception. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function critical($message, array $context = array()) + public function critical(string|\Stringable $message, array $context = []) { $this->log(LogLevel::CRITICAL, $message, $context); } @@ -59,12 +59,12 @@ public function critical($message, array $context = array()) * Runtime errors that do not require immediate action but should typically * be logged and monitored. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function error($message, array $context = array()) + public function error(string|\Stringable $message, array $context = []) { $this->log(LogLevel::ERROR, $message, $context); } @@ -75,12 +75,12 @@ public function error($message, array $context = array()) * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function warning($message, array $context = array()) + public function warning(string|\Stringable $message, array $context = []) { $this->log(LogLevel::WARNING, $message, $context); } @@ -88,12 +88,12 @@ public function warning($message, array $context = array()) /** * Normal but significant events. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function notice($message, array $context = array()) + public function notice(string|\Stringable $message, array $context = []) { $this->log(LogLevel::NOTICE, $message, $context); } @@ -103,12 +103,12 @@ public function notice($message, array $context = array()) * * Example: User logs in, SQL logs. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function info($message, array $context = array()) + public function info(string|\Stringable $message, array $context = []) { $this->log(LogLevel::INFO, $message, $context); } @@ -116,12 +116,12 @@ public function info($message, array $context = array()) /** * Detailed debug information. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function debug($message, array $context = array()) + public function debug(string|\Stringable $message, array $context = []) { $this->log(LogLevel::DEBUG, $message, $context); } diff --git a/Psr/Log/LoggerInterface.php b/Psr/Log/LoggerInterface.php index 2206cfd..b4d062b 100644 --- a/Psr/Log/LoggerInterface.php +++ b/Psr/Log/LoggerInterface.php @@ -22,12 +22,12 @@ interface LoggerInterface /** * System is unusable. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function emergency($message, array $context = array()); + public function emergency(string|\Stringable $message, array $context = []); /** * Action must be taken immediately. @@ -35,35 +35,35 @@ public function emergency($message, array $context = array()); * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function alert($message, array $context = array()); + public function alert(string|\Stringable $message, array $context = []); /** * Critical conditions. * * Example: Application component unavailable, unexpected exception. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function critical($message, array $context = array()); + public function critical(string|\Stringable $message, array $context = []); /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function error($message, array $context = array()); + public function error(string|\Stringable $message, array $context = []); /** * Exceptional occurrences that are not errors. @@ -71,55 +71,55 @@ public function error($message, array $context = array()); * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function warning($message, array $context = array()); + public function warning(string|\Stringable $message, array $context = []); /** * Normal but significant events. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function notice($message, array $context = array()); + public function notice(string|\Stringable $message, array $context = []); /** * Interesting events. * * Example: User logs in, SQL logs. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function info($message, array $context = array()); + public function info(string|\Stringable $message, array $context = []); /** * Detailed debug information. * - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void */ - public function debug($message, array $context = array()); + public function debug(string|\Stringable $message, array $context = []); /** * Logs with an arbitrary level. * * @param mixed $level - * @param string $message + * @param string|\Stringable $message * @param mixed[] $context * * @return void * * @throws \Psr\Log\InvalidArgumentException */ - public function log($level, $message, array $context = array()); + public function log($level, string|\Stringable $message, array $context = []); } diff --git a/Psr/Log/LoggerTrait.php b/Psr/Log/LoggerTrait.php index e392fef..920bda7 100644 --- a/Psr/Log/LoggerTrait.php +++ b/Psr/Log/LoggerTrait.php @@ -15,12 +15,12 @@ trait LoggerTrait /** * System is unusable. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function emergency($message, array $context = array()) + public function emergency(string|\Stringable $message, array $context = []) { $this->log(LogLevel::EMERGENCY, $message, $context); } @@ -31,12 +31,12 @@ public function emergency($message, array $context = array()) * Example: Entire website down, database unavailable, etc. This should * trigger the SMS alerts and wake you up. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function alert($message, array $context = array()) + public function alert(string|\Stringable $message, array $context = []) { $this->log(LogLevel::ALERT, $message, $context); } @@ -46,12 +46,12 @@ public function alert($message, array $context = array()) * * Example: Application component unavailable, unexpected exception. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function critical($message, array $context = array()) + public function critical(string|\Stringable $message, array $context = []) { $this->log(LogLevel::CRITICAL, $message, $context); } @@ -60,12 +60,12 @@ public function critical($message, array $context = array()) * Runtime errors that do not require immediate action but should typically * be logged and monitored. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function error($message, array $context = array()) + public function error(string|\Stringable $message, array $context = []) { $this->log(LogLevel::ERROR, $message, $context); } @@ -76,12 +76,12 @@ public function error($message, array $context = array()) * Example: Use of deprecated APIs, poor use of an API, undesirable things * that are not necessarily wrong. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function warning($message, array $context = array()) + public function warning(string|\Stringable $message, array $context = []) { $this->log(LogLevel::WARNING, $message, $context); } @@ -89,12 +89,12 @@ public function warning($message, array $context = array()) /** * Normal but significant events. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function notice($message, array $context = array()) + public function notice(string|\Stringable $message, array $context = []) { $this->log(LogLevel::NOTICE, $message, $context); } @@ -104,12 +104,12 @@ public function notice($message, array $context = array()) * * Example: User logs in, SQL logs. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function info($message, array $context = array()) + public function info(string|\Stringable $message, array $context = []) { $this->log(LogLevel::INFO, $message, $context); } @@ -117,12 +117,12 @@ public function info($message, array $context = array()) /** * Detailed debug information. * - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void */ - public function debug($message, array $context = array()) + public function debug(string|\Stringable $message, array $context = []) { $this->log(LogLevel::DEBUG, $message, $context); } @@ -131,12 +131,12 @@ public function debug($message, array $context = array()) * Logs with an arbitrary level. * * @param mixed $level - * @param string $message + * @param string|\Stringable $message * @param array $context * * @return void * * @throws \Psr\Log\InvalidArgumentException */ - abstract public function log($level, $message, array $context = array()); + abstract public function log($level, string|\Stringable $message, array $context = []); } diff --git a/Psr/Log/NullLogger.php b/Psr/Log/NullLogger.php index c8f7293..5607705 100644 --- a/Psr/Log/NullLogger.php +++ b/Psr/Log/NullLogger.php @@ -16,14 +16,14 @@ class NullLogger extends AbstractLogger * Logs with an arbitrary level. * * @param mixed $level - * @param string $message - * @param array $context + * @param string|\Stringable $message + * @param array $context * * @return void * * @throws \Psr\Log\InvalidArgumentException */ - public function log($level, $message, array $context = array()) + public function log($level, string|\Stringable $message, array $context = []) { // noop } From 91ef2151f69f50b38d3ae0c156d0187ad2553741 Mon Sep 17 00:00:00 2001 From: Larry Garfield Date: Fri, 4 Jun 2021 11:59:24 -0500 Subject: [PATCH 4/6] Add property type. --- Psr/Log/LoggerAwareTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Psr/Log/LoggerAwareTrait.php b/Psr/Log/LoggerAwareTrait.php index 82bf45c..5f1553a 100644 --- a/Psr/Log/LoggerAwareTrait.php +++ b/Psr/Log/LoggerAwareTrait.php @@ -12,7 +12,7 @@ trait LoggerAwareTrait * * @var LoggerInterface|null */ - protected $logger; + protected ?LoggerInterface $logger = null; /** * Sets a logger. From 957f4658d46804baac6ed3e32c3f9c21952039e5 Mon Sep 17 00:00:00 2001 From: Larry Garfield Date: Fri, 4 Jun 2021 12:26:13 -0500 Subject: [PATCH 5/6] Fold AbstractLogger and LoggerTrait together. --- Psr/Log/AbstractLogger.php | 115 +------------------------------------ 1 file changed, 1 insertion(+), 114 deletions(-) diff --git a/Psr/Log/AbstractLogger.php b/Psr/Log/AbstractLogger.php index bda4a37..d60a091 100644 --- a/Psr/Log/AbstractLogger.php +++ b/Psr/Log/AbstractLogger.php @@ -11,118 +11,5 @@ */ abstract class AbstractLogger implements LoggerInterface { - /** - * System is unusable. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function emergency(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function alert(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function critical(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function error(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function warning(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function notice(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function info(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string|\Stringable $message - * @param mixed[] $context - * - * @return void - */ - public function debug(string|\Stringable $message, array $context = []) - { - $this->log(LogLevel::DEBUG, $message, $context); - } + use LoggerTrait; } From 41f72181b8f33a01554dff55a6a6b0dc7dccc1a4 Mon Sep 17 00:00:00 2001 From: Larry Garfield Date: Wed, 9 Jun 2021 12:31:53 -0500 Subject: [PATCH 6/6] Switch to standard PSR-4 directory structure. --- composer.json | 2 +- {Psr/Log => src}/AbstractLogger.php | 0 {Psr/Log => src}/InvalidArgumentException.php | 0 {Psr/Log => src}/LogLevel.php | 0 {Psr/Log => src}/LoggerAwareInterface.php | 0 {Psr/Log => src}/LoggerAwareTrait.php | 0 {Psr/Log => src}/LoggerInterface.php | 0 {Psr/Log => src}/LoggerTrait.php | 0 {Psr/Log => src}/NullLogger.php | 0 9 files changed, 1 insertion(+), 1 deletion(-) rename {Psr/Log => src}/AbstractLogger.php (100%) rename {Psr/Log => src}/InvalidArgumentException.php (100%) rename {Psr/Log => src}/LogLevel.php (100%) rename {Psr/Log => src}/LoggerAwareInterface.php (100%) rename {Psr/Log => src}/LoggerAwareTrait.php (100%) rename {Psr/Log => src}/LoggerInterface.php (100%) rename {Psr/Log => src}/LoggerTrait.php (100%) rename {Psr/Log => src}/NullLogger.php (100%) diff --git a/composer.json b/composer.json index 0f1505c..f3f0667 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "extra": { diff --git a/Psr/Log/AbstractLogger.php b/src/AbstractLogger.php similarity index 100% rename from Psr/Log/AbstractLogger.php rename to src/AbstractLogger.php diff --git a/Psr/Log/InvalidArgumentException.php b/src/InvalidArgumentException.php similarity index 100% rename from Psr/Log/InvalidArgumentException.php rename to src/InvalidArgumentException.php diff --git a/Psr/Log/LogLevel.php b/src/LogLevel.php similarity index 100% rename from Psr/Log/LogLevel.php rename to src/LogLevel.php diff --git a/Psr/Log/LoggerAwareInterface.php b/src/LoggerAwareInterface.php similarity index 100% rename from Psr/Log/LoggerAwareInterface.php rename to src/LoggerAwareInterface.php diff --git a/Psr/Log/LoggerAwareTrait.php b/src/LoggerAwareTrait.php similarity index 100% rename from Psr/Log/LoggerAwareTrait.php rename to src/LoggerAwareTrait.php diff --git a/Psr/Log/LoggerInterface.php b/src/LoggerInterface.php similarity index 100% rename from Psr/Log/LoggerInterface.php rename to src/LoggerInterface.php diff --git a/Psr/Log/LoggerTrait.php b/src/LoggerTrait.php similarity index 100% rename from Psr/Log/LoggerTrait.php rename to src/LoggerTrait.php diff --git a/Psr/Log/NullLogger.php b/src/NullLogger.php similarity index 100% rename from Psr/Log/NullLogger.php rename to src/NullLogger.php