# Legacy Logging - Umsetzungsstand Stand: 2026-05-11 Update 2026-05-12: Auf dem Live-Server wurden Login- und API-Logs erfolgreich erzeugt, aber noch keine `publications-YYYY-MM-DD.log`. Ursache war sehr wahrscheinlich der Doctrine-1-Zeitpunkt im `postSave()`-Hook: Die aktuellen Modified-Felder sind dort bereits zurueckgesetzt. Der Hook nutzt jetzt `getLastModified(true)`. ## Status Die erste Implementierung ist vorbereitet. Sie protokolliert erfolgreiche und fehlgeschlagene Logins, erfolgreiche und fehlgeschlagene API-Authentifizierungen sowie Veroeffentlichungen von Pressemitteilungen. ## Angelegte Datei ```text _businessportal24.com/lib/LegacyActivityLogger.class.php ``` Zweck: - schreibt JSONL-Tagesdateien nach `_businessportal24.com/log/activity/` - sammelt HTTP-Metadaten - formatiert Nutzer-, Pressemitteilungs-, Firmen- und Kontaktdaten - arbeitet unabhaengig vom deaktivierten Symfony-Produktivlogger ## Geaenderte Legacy-Dateien ```text _businessportal24.com/apps/frontend/lib/myUser.class.php ``` Erfasst erfolgreiche Frontend-Logins und erfolgreiche API-Authentifizierungen, weil beide am Ende ueber `signIn()` laufen. ```text _businessportal24.com/apps/backend/lib/myUser.class.php ``` Erfasst erfolgreiche Backend/Admin-Logins. ```text _businessportal24.com/plugins/PressePortalPlugin/lib/filters/ApiKeyGuardAuthFilter.class.php ``` Erfasst jeden API-Request mit gueltigem `X-ApiKey` ueber den anschliessenden `signIn()`-Pfad und schreibt fehlgeschlagene API-Authentifizierungen direkt in `api-failed-YYYY-MM-DD.log`. ```text _businessportal24.com/plugins/PressePortalPlugin/modules/sfGuardAuth/actions/actions.class.php ``` Erfasst fehlgeschlagene Frontend-Login-Versuche. ```text _businessportal24.com/plugins/PressePortalPlugin/modules/adminSfGuardAuth/actions/actions.class.php ``` Erfasst fehlgeschlagene Backend/Admin-Login-Versuche. ```text _businessportal24.com/lib/model/doctrine/PressePortalPlugin/PressRelease.class.php ``` Erfasst Veroeffentlichungen, sobald der Status einer Pressemitteilung auf `published` wechselt. Seit dem Fix vom 2026-05-12 wird im `postSave()`-Hook `getLastModified(true)` verwendet, weil Doctrine 1 die aktuellen Modified-Felder vor `postSave()` bereits in `lastModified` verschiebt. ## Erwartete Log-Dateien ```text _businessportal24.com/log/activity/login-success-YYYY-MM-DD.log _businessportal24.com/log/activity/login-failed-YYYY-MM-DD.log _businessportal24.com/log/activity/api-success-YYYY-MM-DD.log _businessportal24.com/log/activity/api-failed-YYYY-MM-DD.log _businessportal24.com/log/activity/publications-YYYY-MM-DD.log ``` ## Beispiel: API-Erfolg ```json {"time":"2026-05-11T13:27:00+02:00","app":"frontend","method":"POST","uri":"https://www.businessportal24.com/service/pressreleases.json","ip":"127.0.0.1","user_agent":"Client","event":"api_auth_success","source":"api","user":{"id":123,"username":"kunde@example.com","email":"kunde@example.com"}} ``` ## Beispiel: Veroeffentlichung ```json {"time":"2026-05-11T13:27:00+02:00","event":"pressrelease_published","source":"api","published_by":{"id":123,"username":"kunde@example.com","email":"kunde@example.com"},"owner":{"id":123,"username":"kunde@example.com","email":"kunde@example.com"},"pressrelease":{"id":456,"title":"Titel","language":"de","status":"published"},"company":{"id":77,"name":"Firma GmbH","email":"info@example.com"},"contacts":[{"id":9,"company_id":77,"first_name":"Max","last_name":"Muster","email":"presse@example.com","phone":"+49..."}]} ``` ## Geprueft - PHP-Syntaxpruefung mit `php -l` fuer alle geaenderten Legacy-PHP-Dateien. - IDE-Lints fuer alle geaenderten Legacy-PHP-Dateien: keine Fehler. - 2026-05-12: Fix fuer fehlende Publication-Logs in `PressRelease.class.php` ergaenzt. ## Noch zu pruefen - Manueller Test im Legacy-System: - erfolgreicher Frontend-Login - fehlgeschlagener Frontend-Login - erfolgreicher Backend-Login - fehlgeschlagener Backend-Login - API-Request mit gueltigem `X-ApiKey` - API-Request ohne/mit falschem `X-ApiKey` - Veroeffentlichung ueber API - Veroeffentlichung ueber Kundenlogin - Veroeffentlichung ueber Admin ## Hinweise - Es wird jeder API-Request einzeln protokolliert. - E-Mail-Adressen werden vollstaendig geschrieben. Fehlgeschlagene API-Key-Werte werden ebenfalls vollstaendig protokolliert, damit die Eintraege in der Datenbank wiedergefunden werden koennen. - Die Dateien duerfen nicht in ein oeffentlich erreichbares Verzeichnis verschoben werden. ## Austauschliste fuer den Live-Server Diese Dateien muessen auf dem Legacy-Live-Server ausgetauscht bzw. neu hochgeladen werden: ```text _businessportal24.com/lib/LegacyActivityLogger.class.php _businessportal24.com/apps/frontend/lib/myUser.class.php _businessportal24.com/apps/backend/lib/myUser.class.php _businessportal24.com/plugins/PressePortalPlugin/lib/filters/ApiKeyGuardAuthFilter.class.php _businessportal24.com/plugins/PressePortalPlugin/modules/sfGuardAuth/actions/actions.class.php _businessportal24.com/plugins/PressePortalPlugin/modules/adminSfGuardAuth/actions/actions.class.php _businessportal24.com/lib/model/doctrine/PressePortalPlugin/PressRelease.class.php ``` Nach dem Austausch pruefen, ob das Verzeichnis `_businessportal24.com/log/` fuer den PHP-Prozess beschreibbar ist. Das Unterverzeichnis `activity/` wird automatisch angelegt. ## Austauschliste fuer den Fix vom 2026-05-12 Wenn Login/API-Logs vorhanden sind, aber keine `publications-YYYY-MM-DD.log`, muss nur diese Datei erneut ausgetauscht werden: ```text _businessportal24.com/lib/model/doctrine/PressePortalPlugin/PressRelease.class.php ``` Danach Symfony-Cache leeren und eine Test-Veroeffentlichung ausloesen.