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
This commit is contained in:
185
docs/logging-module.md
Normal file
185
docs/logging-module.md
Normal file
@@ -0,0 +1,185 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user