Files
michaelschiemer/docs/logging-module.md
Michael Schiemer 55a330b223 Enable Discovery debug logging for production troubleshooting
- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
2025-08-11 20:13:26 +02:00

186 lines
4.9 KiB
Markdown

# 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