# Logging-Modul Dokumentation ## Übersicht Das Logging-Modul wurde überarbeitet, um eine konsistente Pfadverwaltung zu gewährleisten und die Konfiguration zu zentralisieren. Die Hauptverbesserungen umfassen: 1. Zentrale Konfiguration für Logpfade mit `LogConfig` 2. Integration des `PathProvider` für konsistente Pfadauflösung 3. Einheitliche Verzeichnisstruktur für verschiedene Logtypen 4. Automatische Erstellung von Logverzeichnissen ## Komponenten ### LogConfig Die neue `LogConfig`-Klasse dient als zentrale Konfiguration für alle Logpfade: ```php final class LogConfig { public function __construct(PathProvider $pathProvider) { // Initialisierung der Logpfade } public function getLogPath(string $type): string { // Gibt den Pfad für einen bestimmten Log-Typ zurück } public function getAllLogPaths(): array { // Gibt alle konfigurierten Logpfade zurück } public function ensureLogDirectoriesExist(): void { // Stellt sicher, dass alle Logverzeichnisse existieren } } ``` ### FileHandler und JsonFileHandler Die Handler wurden aktualisiert, um den `PathProvider` zu verwenden: ```php public function __construct( string $logFile, LogLevel|int $minLevel = LogLevel::DEBUG, string $outputFormat = '[{timestamp}] [{level_name}] {request_id}{channel}{message}', int $fileMode = 0644, ?LogRotator $rotator = null, ?PathProvider $pathProvider = null ) { // Pfad auflösen, falls PathProvider vorhanden if ($this->pathProvider !== null && !str_starts_with($logFile, '/')) { $logFile = $this->pathProvider->resolvePath($logFile); } // ... } ``` ### LoggerInitializer Der `LoggerInitializer` wurde aktualisiert, um `PathProvider` und `LogConfig` zu verwenden: ```php #[Initializer] public function __invoke(TypedConfiguration $config, PathProvider $pathProvider): Logger { // Erstelle LogConfig für zentrale Pfadverwaltung $logConfig = new LogConfig($pathProvider); // Stelle sicher, dass alle Logverzeichnisse existieren $logConfig->ensureLogDirectoriesExist(); // ... $handlers[] = new FileHandler( $logConfig->getLogPath('app'), $minLevel, '[{timestamp}] [{level_name}] {request_id}{channel}{message}', 0644, null, $pathProvider ); // ... } ``` ### LogViewerInitializer Der `LogViewerInitializer` wurde aktualisiert, um `PathProvider` und `LogConfig` zu verwenden: ```php #[Initializer] public function __invoke(PathProvider $pathProvider): LogViewer { // Erstelle LogConfig für zentrale Pfadverwaltung $logConfig = new LogConfig($pathProvider); // Stelle sicher, dass alle Logverzeichnisse existieren $logConfig->ensureLogDirectoriesExist(); // Verwende die konfigurierten Logpfade aus LogConfig $logPaths = $logConfig->getAllLogPaths(); return new LogViewer($logPaths); } ``` ## Verzeichnisstruktur Die Logs werden in einer einheitlichen Verzeichnisstruktur organisiert: ``` logs/ ├── app/ │ ├── app.log │ └── error.log ├── security/ │ └── security.log └── debug/ ├── framework.log ├── cache.log └── database.log ``` ## Konfiguration Die Logpfade können über Umgebungsvariablen konfiguriert werden: - `LOG_BASE_PATH`: Basis-Verzeichnis für Logs (Standard: `logs`) - `LOG_PATH`: Pfad für die Haupt-Logdatei (überschreibt `app.log`) - `PHP_ERROR_LOG`: Pfad für PHP-Fehler (überschreibt `error.log`) - `NGINX_ACCESS_LOG`: Pfad für Nginx-Access-Logs - `NGINX_ERROR_LOG`: Pfad für Nginx-Error-Logs ## Verwendung ### Logger verwenden ```php // Logger wird automatisch über Dependency Injection bereitgestellt public function __construct(Logger $logger) { $this->logger = $logger; } public function someMethod() { $this->logger->info("Eine Informationsmeldung"); $this->logger->error("Ein Fehler ist aufgetreten", ['context' => 'additional data']); } ``` ### LogViewer verwenden ```php // LogViewer wird automatisch über Dependency Injection bereitgestellt public function __construct(LogViewer $logViewer) { $this->logViewer = $logViewer; } public function viewLogs() { // Alle verfügbaren Logs anzeigen $availableLogs = $this->logViewer->getAvailableLogs(); // Inhalt eines bestimmten Logs abrufen $appLogContent = $this->logViewer->getLogContent('app'); } ``` ## Vorteile der neuen Implementierung 1. **Konsistente Pfadverwaltung**: Alle Logpfade werden einheitlich über den `PathProvider` aufgelöst 2. **Zentrale Konfiguration**: Alle Logpfade sind an einem Ort definiert und können einfach geändert werden 3. **Automatische Verzeichniserstellung**: Logverzeichnisse werden automatisch erstellt, wenn sie nicht existieren 4. **Umgebungsvariablen-Support**: Logpfade können über Umgebungsvariablen konfiguriert werden 5. **Strukturierte Logs**: Klare Verzeichnisstruktur für verschiedene Logtypen