Skip to content

Commit

Permalink
Update monolog v3
Browse files Browse the repository at this point in the history
  • Loading branch information
odan committed Sep 7, 2022
1 parent 0342485 commit 50fe468
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 52 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"cakephp/chronos": "^2",
"cakephp/database": "^4",
"fig/http-message-util": "^1.1",
"monolog/monolog": "^2",
"monolog/monolog": "^3",
"nyholm/psr7": "^1.4",
"nyholm/psr7-server": "^1.0",
"php-di/php-di": "^6 || ^7",
Expand Down
9 changes: 8 additions & 1 deletion config/container.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use App\Factory\LoggerFactory;
use App\Handler\DefaultErrorHandler;
use Cake\Database\Connection;
use Monolog\Level;
use Nyholm\Psr7\Factory\Psr17Factory;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseFactoryInterface;
Expand Down Expand Up @@ -64,7 +65,13 @@

// The logger factory
LoggerFactory::class => function (ContainerInterface $container) {
return new LoggerFactory($container->get('settings')['logger']);
$settings = $container->get('settings')['logger'];

return new LoggerFactory(
$settings['level'] ?? Level::Debug,
$settings['path'] ?? 'vfs://root/logs',
$settings['test'] ?? null
);
},

BasePathMiddleware::class => function (ContainerInterface $container) {
Expand Down
2 changes: 1 addition & 1 deletion config/defaults.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
// Log file location
'path' => __DIR__ . '/../logs',
// Default log level
'level' => \Monolog\Logger::INFO,
'level' => \Monolog\Level::Info,
];

// Database settings
Expand Down
2 changes: 1 addition & 1 deletion config/local.dev.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

return function (array $settings): array {
$settings['error']['display_error_details'] = true;
$settings['logger']['level'] = \Monolog\Logger::DEBUG;
$settings['logger']['level'] = \Monolog\Level::Debug;

// Database
$settings['db']['database'] = 'slim_skeleton_dev';
Expand Down
7 changes: 4 additions & 3 deletions config/local.test.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@

// Mocked Logger settings
$settings['logger'] = [
'path' => '',
'level' => 0,
'test' => new \Psr\Log\NullLogger(),
'test' => new \Monolog\Logger('test', [
new \Monolog\Handler\TestHandler(),
new \Monolog\Handler\StreamHandler('php://output'),
]),
];

// API credentials for phpunit
Expand Down
31 changes: 8 additions & 23 deletions src/Factory/LoggerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,25 @@
use Monolog\Handler\HandlerInterface;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Level;
use Monolog\Logger;
use Psr\Log\LoggerInterface;
use Symfony\Component\Uid\Uuid;

/**
* Factory.
*/
final class LoggerFactory
{
private string $path;

private int $level;
private Level $level;

private array $handler = [];

private ?LoggerInterface $testLogger;

/**
* The constructor.
*
* @param array $settings The settings
*/
public function __construct(array $settings = [])
{
$this->path = (string)($settings['path'] ?? '');
$this->level = (int)($settings['level'] ?? Logger::DEBUG);
$this->level = ($settings['level'] ?? Level::Debug);

// This can be used for testing to make the Factory testable
if (isset($settings['test'])) {
Expand All @@ -42,9 +35,7 @@ public function __construct(array $settings = [])
/**
* Build the logger.
*
* @param string|null $name The logging channel
*
* @return LoggerInterface The logger
* @param string|null $name
*/
public function createLogger(string $name = null): LoggerInterface
{
Expand All @@ -66,9 +57,7 @@ public function createLogger(string $name = null): LoggerInterface
/**
* Add a handler.
*
* @param HandlerInterface $handler The handler
*
* @return self The logger factory
* @param HandlerInterface $handler
*/
public function addHandler(HandlerInterface $handler): self
{
Expand All @@ -80,10 +69,8 @@ public function addHandler(HandlerInterface $handler): self
/**
* Add rotating file logger handler.
*
* @param string $filename The filename
* @param int|null $level The level (optional)
*
* @return self The logger factory
* @param string $filename
* @param int|null $level
*/
public function addFileHandler(string $filename, int $level = null): self
{
Expand All @@ -102,9 +89,7 @@ public function addFileHandler(string $filename, int $level = null): self
/**
* Add a console logger.
*
* @param int|null $level The level (optional)
*
* @return self The logger factory
* @param int|null $level
*/
public function addConsoleHandler(int $level = null): self
{
Expand Down
38 changes: 16 additions & 22 deletions tests/Traits/LoggerTestTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,50 +4,44 @@

use App\Factory\LoggerFactory;
use Monolog\Handler\TestHandler;
use Monolog\Logger;
use Monolog\Level;
use Monolog\LogRecord;
use UnexpectedValueException;

/**
* Test trait.
*/
trait LoggerTestTrait
{
protected TestHandler $testHandler;

/**
* Add test logger.
*
* @return void
*/
protected function setUpLogger(): void
{
$this->testHandler = new TestHandler();
$logger = new Logger('', [$this->testHandler]);
$loggerFactory = $this->container->get(LoggerFactory::class);
$handlers = $loggerFactory->getTestLogger()->getHandlers();

foreach ($handlers as $handler) {
if ($handler instanceof TestHandler) {
$this->testHandler = $handler;

return;
}
}

$loggerFactory = new LoggerFactory(['test' => $logger]);
$this->setContainerValue(LoggerFactory::class, $loggerFactory);
throw new UnexpectedValueException('The monolog test handler is not configured');
}

/**
* Get test logger handler.
*
* @return TestHandler The logger
*/
protected function getLogger(): TestHandler
{
return $this->testHandler;
}

/**
* Get test logger error messages.
*
* @return array The error messages
* @return array<LogRecord>
*/
protected function getLoggerErrors(): array
{
$errors = [];

foreach ($this->testHandler->getRecords() as $record) {
if ($record['level_name'] === 'ERROR') {
if ($record->level === Level::Error) {
$errors[] = $record;
}
}
Expand Down

0 comments on commit 50fe468

Please sign in to comment.