chore: update console components, logging, router and add subdomain support

This commit is contained in:
2025-11-03 12:44:39 +01:00
parent 6d355c9897
commit ee06cbbbf1
18 changed files with 2080 additions and 113 deletions

View File

@@ -37,7 +37,7 @@ final class ChannelLoggerRegistry
// Falls nicht möglich (custom channel), verwende den String direkt
$logChannel = $channel instanceof LogChannel
? $channel
: (LogChannel::tryFrom($channelName) ?? LogChannel::APPLICATION);
: (LogChannel::tryFrom($channelName) ?? LogChannel::APP);
$this->channelLoggers[$channelName] = new DefaultChannelLogger(
$this->logger,

View File

@@ -11,6 +11,9 @@ use App\Framework\Logging\LogRecord;
/**
* Handler für die Ausgabe von Log-Einträgen in der Konsole.
*
* Bei CLI: Nutzt stderr für WARNING+ und stdout für niedrigere Levels.
* Bei Web-Requests: Alle Logs gehen auf stderr (POSIX-konform, Docker-kompatibel).
*/
class ConsoleHandler implements LogHandler
{
@@ -52,18 +55,12 @@ class ConsoleHandler implements LogHandler
*/
public function isHandling(LogRecord $record): bool
{
// Nur im CLI-Modus aktiv - NIE bei Web-Requests!
if (PHP_SAPI !== 'cli') {
return false;
}
// Optional: Debug-Modus-Check nur in CLI
// Optional: Debug-Modus-Check
if ($this->debugOnly && ! filter_var(getenv('APP_DEBUG'), FILTER_VALIDATE_BOOLEAN)) {
return false;
}
return $record->getLevel()->value >= $this->minLevel->value;
return $record->level->value >= $this->minLevel->value;
}
/**
@@ -84,12 +81,16 @@ class ConsoleHandler implements LogHandler
$output .= PHP_EOL;
}
// Fehler und Warnungen auf stderr, alles andere auf stdout
if ($record->getLevel()->value >= $this->stderrLevel->value) {
// WARNING, ERROR, CRITICAL, ALERT, EMERGENCY -> stderr
// Bei Web-Requests: Alle Logs auf stderr (kein stdout, da das in HTTP-Response gehen würde)
// Bei CLI: stderr für WARNING+, stdout für niedrigere Levels
if (PHP_SAPI !== 'cli') {
// Web-Requests: Immer stderr verwenden
file_put_contents('php://stderr', $output);
} elseif ($record->level->value >= $this->stderrLevel->value) {
// CLI: WARNING, ERROR, CRITICAL, ALERT, EMERGENCY -> stderr
file_put_contents('php://stderr', $output);
} else {
// DEBUG, INFO, NOTICE -> stdout
// CLI: DEBUG, INFO, NOTICE -> stdout
echo $output;
}
}

View File

@@ -19,7 +19,6 @@ use App\Framework\Logging\Handlers\FileHandler;
use App\Framework\Logging\Handlers\MultiFileHandler;
use App\Framework\Logging\Handlers\NullHandler;
use App\Framework\Logging\Handlers\QueuedLogHandler;
use App\Framework\Logging\Handlers\WebHandler;
use App\Framework\Logging\LogHandler;
use App\Framework\Queue\Queue;
use App\Framework\Queue\RedisQueue;
@@ -152,13 +151,20 @@ final readonly class LoggerInitializer
): array {
$handlers = [];
// Docker/Console Logging Handler
// Console/Docker Logging Handler - für CLI und Web-Requests
if (PHP_SAPI === 'cli') {
// CLI: Docker JSON oder Console Handler
$handlers[] = $this->createCliHandler($config, $env, $minLevel);
} else {
// Web-Requests: Console Handler auf stderr
$webFormatter = new LineFormatter(
format: '[{timestamp}] [{level_name}] {request_id}{channel}{message}',
timestampFormat: 'Y-m-d H:i:s'
);
$handlers[] = new ConsoleHandler($webFormatter, $minLevel, debugOnly: false);
}
//$handlers[] = new QueuedLogHandler($queue);
$handlers[] = new WebHandler();
// MultiFileHandler für automatisches Channel-Routing
$multiFileFormatter = new LineFormatter();

View File

@@ -13,6 +13,7 @@ use App\Framework\Logging\ValueObjects\LogContext;
#[Singleton]
final class PhpErrorLogInterceptor
{
/* @var resource|null */
private $interceptStream = null;
private ?string $originalErrorLog = null;
@@ -20,8 +21,9 @@ final class PhpErrorLogInterceptor
private bool $isInstalled = false;
public function __construct(
private Logger $logger
private readonly Logger $logger
) {
$this->logger->debug('PhpErrorLogInterceptor initialized');
}
/**

View File

@@ -4,8 +4,8 @@ declare(strict_types=1);
namespace App\Framework\Logging;
use App\Framework\Attributes\Initializer;
use App\Framework\DI\Container;
use App\Framework\DI\Initializer;
/**
* Initializer für PHP Error Log Interceptor