No results
1
Logging
muke edited this page 2026-03-01 23:10:38 +01:00
Logging
Zweck: Dokumentiert das Logging-Design, die Datenbank-Tabelle, die Maskierungsregeln und die Anwendung von LogManager.
Kurzüberblick:
- Wir schreiben Logs primär in Dateien (30d Retention) und optional in die DB (
logs-Tabelle). - Payloads werden vor dem Persistieren maskiert (z. B.
api_token,password,Authorization).
Schema (Tabelle logs):
idINT AUTO_INCREMENT PRIMARY KEYcreated_atDATETIME NOT NULLjob_idINT NULLphidVARCHAR(64) NULL -- Phorge PHID, falls vorhandenfingerprintVARCHAR(128) NULLseverityENUM('debug','info','warning','error','critical') NOT NULLchannelVARCHAR(64) NOT NULL DEFAULT 'app'messageTEXT NOT NULLpayloadJSON NULLcontextJSON NULLstack_traceTEXT NULLhostVARCHAR(128) NULLapp_versionVARCHAR(64) NULL- Indexe:
created_at,phid,fingerprint,severity
Migration:
- Datei:
sql/create_logs_table.sql(enthält CREATE TABLE und Hinweis zur Retention) - Ausführen (Beispiel im Dev-Container):
docker compose -f docker-compose.yml -f docker-compose.dev.yml exec -T app \
php -r 'require "/app/src/Autoloader.php"; $config=require "/app/config/config.php"; $db=new App\\Database\\DBManager($config); $sql=file_get_contents("/app/sql/create_logs_table.sql"); $db->query($sql); echo "created\n";'
Maskierung / Sicherheit:
- Vor Persistenz werden Schlüssel mit Mustern
token,password,authorization,api.token,api_token,authrekursiv ersetzt mit***REDACTED***. - File-Logs enthalten maskierte Payloads. DB speichert maskierte JSON im
payload-Feld. - Empfehlung: niemals Secrets unmasked irgendwo im Repo oder Logs speichern.
LogManager (Kurzreferenz):
- Signatur:
log(string $message, string $severity = 'info', ?array $payload = null, ?string $fingerprint = null, ?string $phorge_id = null, ?int $job_id = null, string $channel = 'app') - Behaviour:
- Maskiert Payloads und schreibt je nach
config['log_mode']in File, DB oder beides (log_dual). app_versionwird ausconfig.phpübernommen,hostwird automatisch ergänzt.
- Maskiert Payloads und schreibt je nach
Konfiguration (in config.php):
log_mode:file|db|console(default in Vorlage:db)log_level:debug|info|warning|error|criticallog_dual: true/falselog_dir,log_file(sieheconfig.template.php)
Beispiele:
require '/app/src/Autoloader.php';
$l = new App\Log\LogManager();
$l->log('Task angelegt', 'info', ['user'=>'alice','api_token'=>'secret-123'], 'fp-123', 'PHID-XYZ', 99, 'maniphest');
Troubleshooting:
- Falls DB-Insert fehlschlägt, schreibt
LogManagerden Fehler automatisch in die File-Logs (internalKanal). - Prüfen:
/app/logs/app.logund DB-Tabellelogs.
Nächste Schritte:
- Optional: Background-Job für Retention (DELETE WHERE created_at < NOW() - INTERVAL 30 DAY).
- Integrationstests: Dry-run-Harness ergänzen, um Log-Pfade automatisiert zu prüfen.
Ticket-Referenzen: T1019 (Schema), T1022 (LogManager-Implementierung), T1021 (Dokumentation)
Navigation
Erste Schritte
- Home
- Projektziele - Vision & Feature-Übersicht
- Projektstruktur - Verzeichnisse & Komponenten
Technisch
- Überblick - Architektur & Datenfluss
- Datenbank - Schema & DBManager
- Logging - Log-System verstehen
- API-Integration - Phorge API-Calls
Für Entwickler
- Entwicklung - Tasks schreiben, Patterns
- Phorge-API - Kurzeinführung in Conduit
- Konventionen - Code-Style, Deutsch in Commits
- Dev-Guide - Lokal testen & debuggen
- Schema-Refresh - Schema-Generator für Custom-Felder
- Logging - Design und Anwendung des Loggers
Betrieb
- Deployment - Installation auf Wikonia-Server
- Cron-Jobs - Automatisierte Ausführung
- Sicherheit - Best Practices
Help
- Häufige Fehler - Troubleshooting
---
PhorgeRunner - Automatisierungs-Tool für Wikonia Phorge
Repository: Git phorgerunner | Phorge Instanz: phorge.wikonia.net