chore: update console components, logging, router and add subdomain support
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user