*/ private array $channelLoggers = []; public function __construct( private readonly SupportsChannels $logger ) { // Standard-Channels vorinitialisieren $this->initializeStandardChannels(); } /** * Holt einen ChannelLogger für einen spezifischen Channel * Erstellt ihn lazy, falls er noch nicht existiert * * Unterstützt sowohl LogChannel Enum-Werte als auch custom String-Channels */ public function get(LogChannel|string $channel): Logger&HasChannel { $channelName = $channel instanceof LogChannel ? $channel->value : $channel; if (!isset($this->channelLoggers[$channelName])) { // Versuche zuerst, den Channel als LogChannel Enum zu erstellen // Falls nicht möglich (custom channel), verwende den String direkt $logChannel = $channel instanceof LogChannel ? $channel : (LogChannel::tryFrom($channelName) ?? LogChannel::APP); $this->channelLoggers[$channelName] = new DefaultChannelLogger( $this->logger, $logChannel ); } return $this->channelLoggers[$channelName]; } /** * Prüft ob ein Channel bereits registriert ist */ public function has(LogChannel|string $channel): bool { $channelName = $channel instanceof LogChannel ? $channel->value : $channel; return isset($this->channelLoggers[$channelName]); } /** * Gibt alle registrierten Channel-Namen zurück * * @return array */ public function getRegisteredChannels(): array { return array_keys($this->channelLoggers); } /** * Initialisiert Standard-Channels für bessere Performance * (verhindert lazy creation bei häufig genutzten Channels) */ private function initializeStandardChannels(): void { // Alle Standard-Channels aus LogChannel Enum vorinitialisieren foreach (LogChannel::cases() as $channel) { $this->channelLoggers[$channel->value] = new DefaultChannelLogger( $this->logger, $channel ); } } }