- Add DISCOVERY_LOG_LEVEL=debug - Add DISCOVERY_SHOW_PROGRESS=true - Temporary changes for debugging InitializerProcessor fixes on production
186 lines
4.9 KiB
Markdown
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
|