getMessage()."\n"); fwrite(\STDERR, 'File: '.$t->getFile().':'.$t->getLine()."\n"); fwrite(\STDERR, $t->getTraceAsString()."\n"); exit(1); }); function logger(): LoggerInterface { return new class extends AbstractLogger { public function log($level, Stringable|string $message, array $context = []): void { $debug = $_SERVER['DEBUG'] ?? false; if (!$debug && 'debug' === $level) { return; } $logMessage = sprintf( "[%s] %s %s\n", strtoupper($level), $message, ([] === $context || !$debug) ? '' : json_encode($context), ); if ($_SERVER['FILE_LOG'] ?? false) { file_put_contents('dev.log', $logMessage, \FILE_APPEND); } fwrite(\STDERR, $logMessage); } }; } function container(): Container { $container = new Container(); $container->set(LoggerInterface::class, logger()); return $container; }