*/ class BeforeMessageLoggedEventListener implements IEventListener { public function __construct( private int $level, ) { } public function handle(Event $event): void { if (!$event instanceof BeforeMessageLoggedEvent) { return; } if ($event->getLevel() < $this->level) { return; } echo match($event->getLevel()) { 0 => '[debug]', 1 => '[info]', 2 => '[warning]', 3 => '[error]', 4 => '[fatal]', default => '[' . $event->getLevel() . ']', } . ' [' . $event->getApp() . '] ' . $event->getMessage()['message'] . "\n"; } /** * Register listener to log messages and remove debug options from $_SERVER['argv'] */ public static function setup(): void { $eventDispatcher = Server::get(IEventDispatcher::class); $argv = $_SERVER['argv']; $level = 0; foreach ($argv as $key => $arg) { if ($arg === '--' . ReservedOptions::DEBUG_LOG) { unset($argv[$key]); } elseif (str_starts_with($arg, '--' . ReservedOptions::DEBUG_LOG_LEVEL . '=')) { $level = (int)substr($arg, strlen('--' . ReservedOptions::DEBUG_LOG_LEVEL . '=')); unset($argv[$key]); } } $_SERVER['argv'] = array_values($argv); $debugLoggerEventListener = new self($level); $eventDispatcher->addListener(BeforeMessageLoggedEvent::class, $debugLoggerEventListener->handle(...)); } }