Entwickler-Dokumentation
Auf dieser Seite... (ausblenden)
Ab Version 1.3. wurde ein zentraler Logging-Mechanismus implementiert, der bestimmte Aktionen mit Timestamp und Userkennung festhält.

Es gibt zwei neue Tabellen:
Entählt Beschreibungen und Daten von Aktionen, wie z.B. "Anlegen einer neuen Veranstaltung".
Ein Eintrag sieht dann z.B. so aus:
action_id=3, name=SEM_VISIBLE description="Veranstaltung sichtbar schalten" info_template="%user schaltet %sem(%affected) sichtbar." active=1 expires=NULL
Der Info-Template-String kann ein paar Platzhalter enthalten, insgesamt wird daraus bei der Anzeige des Logs der Text generiert, der oben im Scrrenshot zu sehen ist.
expires kann genutzt werden, um Einträge nach einer bestimmten Zeit automatisch löschen zu lassen, z.B. aus datenschutzgründen oder zum Platz sparen. Über ein spezielles Interface (noch nich implementiert) kann das Logging bestimmter Aktionen einfach ein- und ausgeschaltet werden.
Die einzelnen Events werden in einer zweiten Tabelle gespeichert:
Durch den gewählten Ansatz leistet das Logging zweierlei:
Im Code müssen die Stellen identifiziert werden, an denen eine Aktion ausgelöst wird und meist eine Zeile wie:
eingefügt werden. Sind mehr als zwei Objekte betroffen, kommen die Zusatzinformationen (nicht durchsuchbar) in den Infotext, z.B. die Angabe über die gebuchte Zeit beim Auflösen einer Raumanfrage. In die Debug-Infos können z.B. Details über die Stelle im Code eingebaut werden, von der aus die Aktion ausgeführt wurde, komplette Queries abegelegt werden etc.
| $action | Text-ID des Log-Events |
| $affected | ID des Objektes, das im Datenbankfeld affected landet (kann je nach Event Veranstaltung, Institut, Nutzer, Ressource, ... sein - da wird nichts gecheckt, sondern einfach eingetragen) |
| $coaffected | ID des Objektes, das im Datenbankfeld coaffected landet (kann je nach Event Veranstaltung, Institut, Nutzer, Ressource, ... sein - da wird nichts gecheckt, sondern einfach eingetragen) |
| $info | Freier Text für Feld info |
| $dgb_info | Freier Text für Debug-Info-Feld |
| $user | Normalerweise wird die user_id des Handelnden aus der Session übernommen. Hier kann eine abweichende user_id angegeben werden, z.B. für Aktionen, die von "%%__SYSTEM__%%" ausgeführt werden. |
Die Funktion überprüft, ob das Logging eingeschaltet und das gewünschte Event aktiv ist.
TODO: Beispiele... Bis dahin: Im Code nach log_event(...) suchen ;-)
Wird ein Event in der Tabelle log_actions nicht gefunden, wird der Event-Call nicht verworfen, sondern unter dem Event LOG_ERROR mit allen übergebenen Parametern im Info-Text gespeichert:
Event-Vorlagen (Actions) werden nicht über die Oberfläche angelegt (würde wenig bringen, da ohnehin Code angefasst werden muss), sondern mit einem SQL-Statement direkt in die Datenbank geschrieben. Die action_id (MD5-Key) kann frei gewählt werden, muss aber eindeutig sein. Es bietet sich an md5(name) zu verwenden (kann z.b. hier erzeugt werden).
Events für die neue Action dann wie oben beschrieben mittels log_event(<ACTION_NAME>, ...) ausgelöst werden. Die Semantik der weiteren Parameter ergibt sich aus dem Template in log_actions.
Die Events stehen anschließend automatisch über das Log-Tool allen Root-Nutzern zur Verfügung (Verwalten globaler Einstellungen -> Tools -> Log). Die neuen Actions sind in der der Auswahlbox links enthalten, angezeigt wird dort der description-Eintrag.
Es soll geloggt werden, wer wessen E-Mail-Adresse wann und auf welchen Wert geändert hat.
| action_id | 21b0b3fc30605876686617a1aec92321 |
| name | CHANGE_EMAIL |
| description | E-Mail-Adresse ändern |
| info_template | %user ändert/setzt E-Mail-Adresse für %user(%affected): %info. |
| active | 1 |
| expires | 0 |
log_event("CHANGE_EMAIL",$user_id,'',"von tobias.thelen@beispiel.test auf thelen@anderesbeispiel.test");
Letzte Änderung am 20.09.2007 13:02 Uhr von tthelen.
Hier finden Sie Entwickler-Dokumentation für Stud.IP.
Hilfe zur Bedienung und Administration von Stud.IP finden Sie im Dokumentations-Portal.