Skip to content

Commit

Permalink
Merge pull request #21 from chadicus/master
Browse files Browse the repository at this point in the history
Add InMemoryLogger
  • Loading branch information
chadicus committed Sep 21, 2018
2 parents cbeae7e + c953b5c commit 0581b49
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/InMemoryLogger.php
@@ -0,0 +1,48 @@
<?php

namespace SubjectivePHP\Psr\Log;

use ArrayObject;
use Psr\Log\AbstractLogger;
use Psr\Log\LoggerInterface;

/**
* PSR-3 Logger implementation writing to an array.
*/
final class InMemoryLogger extends AbstractLogger implements LoggerInterface
{
use MessageInterpolationTrait;

/**
* @var ArrayObject
*/
private $logs;

/**
* Construct a new instance of the logger.
*
* @param ArrayObject $logs Container for log entries.
*/
public function __construct(ArrayObject $logs)
{
$this->logs = $logs;
}

/**
* Logs with an arbitrary level.
*
* @param string $level A valid RFC-5424 log level.
* @param string $message The base log message.
* @param array $context Any extraneous information that does not fit well in a string.
*
* @return void
*/
public function log($level, $message, array $context = [])
{
$this->logs[] = [
'level' => $level,
'message' => $this->interpolateMessage($message, $context),
'context' => $context,
];
}
}
42 changes: 42 additions & 0 deletions tests/InMemoryLoggerTest.php
@@ -0,0 +1,42 @@
<?php

namespace SubjectivePHPTest\Psr\Log;

use ArrayObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LogLevel;
use SubjectivePHP\Psr\Log\InMemoryLogger;

/**
* @coversDefaultClass \SubjectivePHP\Psr\Log\InMemoryLogger
* @covers ::__construct
*/
final class InMeoryLoggerTest extends TestCase
{
/**
* @test
* @covers ::log
*
* @return void
*/
public function logAlertWithMessageInterpolation()
{
$exception = new \RuntimeException();
$logs = new ArrayObject();
$logger = new InMemoryLogger($logs);
$logger->alert('logged {count} entries', ['exception' => $exception, 'count' => 1]);
$this->assertSame(
[
[
'level' => LogLevel::ALERT,
'message' => 'logged 1 entries',
'context' => [
'exception' => $exception,
'count' => 1,
],
],
],
$logs->getArrayCopy()
);
}
}

0 comments on commit 0581b49

Please sign in to comment.