pathProvider = $pathProvider; $this->formatter = $formatter; // Pfad auflösen, falls PathProvider vorhanden if ($this->pathProvider !== null && ! str_starts_with($logFile, '/')) { $logFile = $this->pathProvider->resolvePath($logFile); } $this->logFile = $logFile; $this->minLevel = $minLevel instanceof LogLevel ? $minLevel : LogLevel::fromValue($minLevel); // Stelle sicher, dass das Verzeichnis existiert $this->ensureDirectoryExists(dirname($logFile)); } /** * Überprüft, ob dieser Handler den Log-Eintrag verarbeiten soll */ public function isHandling(LogRecord $record): bool { return $record->getLevel()->value >= $this->minLevel->value; } /** * Verarbeitet einen Log-Eintrag */ public function handle(LogRecord $record): void { // Formatter verwenden für JSON-Formatierung $json = ($this->formatter)($record); // JsonFormatter gibt immer string zurück $output = is_string($json) ? $json : json_encode($json, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); // Stelle sicher, dass ein Newline vorhanden ist if (!str_ends_with($output, PHP_EOL)) { $output .= PHP_EOL; } $this->write($output); } /** * Gibt den Formatter zurück */ public function getFormatter(): LogFormatter { return $this->formatter; } /** * Schreibt einen String in die Log-Datei */ protected function write(string $output): void { file_put_contents($this->logFile, $output, FILE_APPEND); } /** * Stellt sicher, dass ein Verzeichnis existiert */ private function ensureDirectoryExists(string $dir): void { if (! file_exists($dir)) { mkdir($dir, 0777, true); } } /** * Minimales Log-Level setzen */ public function setMinLevel(LogLevel|int $level): self { $this->minLevel = $level instanceof LogLevel ? $level : LogLevel::fromValue($level); return $this; } /** * Log-Datei setzen */ public function setLogFile(string $logFile): self { // Pfad auflösen, falls PathProvider vorhanden if ($this->pathProvider !== null && ! str_starts_with($logFile, '/')) { $logFile = $this->pathProvider->resolvePath($logFile); } $this->logFile = $logFile; $this->ensureDirectoryExists(dirname($logFile)); return $this; } }