Ich soll die Benutzeraktivitätsprotokollierung für meine Webanwendung implementieren ( php
+ js
+ mysql
).
Vorher habe ich diesen Ansatz verwendet:
activity
table mit der Benutzer-ID aus dieser temporären Tabelle Nun möchte ich nicht wirklich so viel Logik in die Datenbank schreiben, also ist meine Frage: Was ist die beste Praxis? Sollte ich mit der beschriebenen Methode bleiben, oder sollte ich etwas (was?) Anderes verwenden?
Bearbeiten
Ich habe diese Frage gesehen, aber ich bin daran interessiert, beschriebene Methode mit einer in den Antworten zu vergleichen.
edit2
Warum brauche ich Logs: Ich muss wissen, welcher Benutzer verantwortlich ist, wenn etwas schief geht =)
loggs müssen geänderte Daten und neue Daten enthalten, um zu sehen, was sich tatsächlich geändert hat.
Es wird nicht viele Benutzer geben, es ist eine Unternehmens-App und unsere Firma ist nicht so groß.
Die Hauptfrage ist, wo sollte ich logging logics: Datenbank oder Anwendung (php backend) level?
Wie immer "kommt es darauf an".
Wenn die Entwicklung Ihrer Kerngeschäftskonzepte im Laufe der Zeit wichtig ist, sollte dies ein erstklassiges Konzept für Ihr Datenbankdesign sowie für Ihre PHP-Logik sein. Fowler schreibt darüber in " Analysemuster ". Auf diese Weise können Sie erfassen, wer welche Änderungen an Ihren Geschäftsobjekten vorgenommen hat, und Fragen wie "Wer hat das Projekt vom Typ x in y geändert haben am Tag z?", "Wie oft hat Benutzer x das Produkt y geändert?" usw. Es macht das Domänenmodell komplexer.
Wenn Sie diese Integrationsstufe nicht benötigen, ist es meine Priorität, die Protokollierungsfunktionalität in PHP zu verwenden. Auslöser haben eine schreckliche Art, eine Datenbank zu verlangsamen oder zu unerwarteten Nebenwirkungen zu führen oder von Entwicklern, die Änderungen am Schema vornehmen, vergessen zu werden. In PHP würde ich also explizite "log this" -Anweisungen einschließen, möglicherweise unter Verwendung eines Aspekt-orientierten Frameworks (obwohl ich das in PHP nie benutzt habe, nur in Java).
Für die Protokollierung möchten Sie eine Tabelle logs
haben, in der Sie die Sitzungs-ID $_SESSION['id']
(vorausgesetzt, Sie haben Sitzungen?) und die Aktivität des Benutzers protokollieren. Sie fügen es dann mit einer verzögerten MySQL-Abfrage ein (weil die Protokolle keine hohe Priorität haben):
Siehe diesen Link für weitere Informationen zu DELAYED-Einsätzen.
Mit anderen Worten, setzen Sie die gesamte Logik auf die PHP-Seite, haben Sie einfach eine MySQL-Tabelle, in der Sie alle Aktivitäten mit verzögerten protokollieren. Dies wäre eine Funktion log_activity ($ session_id, $ activity), die Sie von überall aufrufen können, wo eine protokollierbare Aktivität vorhanden ist.