ScopedLogger.php
PHP
Path: src/Logger/ScopedLogger.php
<?php
namespace mini\Logger;
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerTrait;
/**
* Logger decorator that prefixes messages with a scope identifier
*
* Useful for adding component/module context to log messages without
* coupling code to a specific logger implementation.
*
* Usage:
* $log = new ScopedLogger('http', \mini\log());
* $log->info("Request received");
* // Output: [http] Request received
*/
final class ScopedLogger implements LoggerInterface
{
use LoggerTrait;
public function __construct(
private string $scope,
private LoggerInterface $inner,
) {}
public function log($level, string|\Stringable $message, array $context = []): void
{
$scopedMessage = "[{$this->scope}] {$message}";
$context['scope'] ??= $this->scope;
$this->inner->log($level, $scopedMessage, $context);
}
}