Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add InMemoryLogger #21

Merged
merged 1 commit into from Sep 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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()
);
}
}