- Add DISCOVERY_LOG_LEVEL=debug - Add DISCOVERY_SHOW_PROGRESS=true - Temporary changes for debugging InitializerProcessor fixes on production
4.9 KiB
4.9 KiB
Logging-Modul Dokumentation
Übersicht
Das Logging-Modul wurde überarbeitet, um eine konsistente Pfadverwaltung zu gewährleisten und die Konfiguration zu zentralisieren. Die Hauptverbesserungen umfassen:
- Zentrale Konfiguration für Logpfade mit
LogConfig - Integration des
PathProviderfür konsistente Pfadauflösung - Einheitliche Verzeichnisstruktur für verschiedene Logtypen
- Automatische Erstellung von Logverzeichnissen
Komponenten
LogConfig
Die neue LogConfig-Klasse dient als zentrale Konfiguration für alle Logpfade:
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:
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:
#[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:
#[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 (überschreibtapp.log)PHP_ERROR_LOG: Pfad für PHP-Fehler (überschreibterror.log)NGINX_ACCESS_LOG: Pfad für Nginx-Access-LogsNGINX_ERROR_LOG: Pfad für Nginx-Error-Logs
Verwendung
Logger verwenden
// 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
// 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
- Konsistente Pfadverwaltung: Alle Logpfade werden einheitlich über den
PathProvideraufgelöst - Zentrale Konfiguration: Alle Logpfade sind an einem Ort definiert und können einfach geändert werden
- Automatische Verzeichniserstellung: Logverzeichnisse werden automatisch erstellt, wenn sie nicht existieren
- Umgebungsvariablen-Support: Logpfade können über Umgebungsvariablen konfiguriert werden
- Strukturierte Logs: Klare Verzeichnisstruktur für verschiedene Logtypen