2010-12-10 7 views
0

Ich habe gerade ein Protokollierungskonzept für mein Grails-System integriert und den Filtermechanismus verwendet, um den Zugriff auf meine Controller und Aktionen zu protokollieren. Das Gute ist, dass ich einen Filter für alle Controller und Aktionen definieren kann.Umgebungsfilter/Interzeptoren für Domänenklassen in Gorm/Grails?

Mit Domain-Klassen kenne ich nur das Interceptor-Konzept, wo ich einen Interceptor für jede einzelne Domain-Klasse schreiben muss. Gibt es ein Konzept ähnlich zu Filtern für Domänenklassen, wo ich einen Interzeptor für ALLE Domänenklassen definieren kann?

Vielen Dank im Voraus, Joerg.

UPDATE 1: Vielen Dank für den Tipp auf das Audit Logging Plugin von Stefan. Das Audit Logging Plugin sieht wie die einfachste Alternative aus, erzeugt aber zu viele Zeilen/Logs für meinen Geschmack und verwendet nicht das Log-System grails/log4j.

Derzeit meine Anforderungen sind:

  1. Melden Sie den insert/update/delete für alle Domain-Klassen (um nur die Ereignisse zu protokollieren, nicht jede Änderung an jedem Feld/Spalte)

  2. Loggen Sie sich in das Grails-Logging-System (log4j) ein, um sich in stdout, einzelne Datenbanktabellen oder E-Mails einzuloggen (Die Ebene könnte zB INFO oder TRACE sein)

  3. Log in eine spezielle Domain-Klasse (db table) um ein Log-Visualization zu erstellen Ion/Management-System darüber (über Grails Controller & Aktionen). Hier wäre es gut zu konfigurieren, ob sich die Logs in derselben oder einer anderen Datenbank/Grails-App befinden (um später das Log-Management-System aufzuteilen).

Soweit ich ein einfaches "change" Logging wissen kann folgendermaßen geschehen:

  1. Einzelprotokoll Aussagen in Domain-Klassen (erfordert insert/update/delete Ereignisse in jeder Domain-Klasse)

  2. definieren "Log" Superklasse, die die insert/update erbt/löschen Ereignisse (macht es schwer indivudal insert/update/delete Ereignisse in speziellen Domain-Klassen zu machen)

  3. einen Filter für alle Controller definieren, sondern nur speichern/update/delete Aktionen (Problem: log keine Änderungen an Domain-Klassen ohne Controller oder wenn mehrere Domain-Klassen in einer gemeinsamen Aktion berührt)

this helps andere. Habe ich trotzdem etwas verpasst?

Antwort

0

Vielleicht ist http://www.grails.org/plugin/audit-logging das, was Sie suchen.

+0

Vielen Dank für den Tipp. Das Audit Logging Plugin kann die Domain-Klassen in einer Datenbanktabelle protokollieren. Es scheint jedoch, dass es nicht sehr einfach zu konfigurieren ist. Ich habe keine Möglichkeit gefunden, die Datenbank, Tabellenspalten oder die Protokollierungsstufe zu konfigurieren. Zum Beispiel protokolliert das Plugin jede Änderung in jedem Feld einer Domänenklasse, wodurch es als Versionssystem verwendet werden kann (Sie können jede Änderung rückgängig machen). Allerdings muss ich nur die Änderung selbst protokollieren (einfügen, aktualisieren, löschen) und möchte die konfigurierte log4j-Protokollierung verwenden (d. H. Meine eigenen Appender für Datenbanken, Dateien oder E-Mails). –

+0

Eine andere Option wäre das Überschreiben des 'eventTriggeringInterceptor' in resources.groovy. Standardmäßig verwendet diese Bean ClosureEventTriggeringInterceptor, die an die onXXX-Methoden in jeder der Domänenklassen delegiert. Wenn Sie eine benutzerdefinierte Klasse für eventTriggeringInterceptor verwenden, können Sie Ereignisse auf globaler Ebene und nicht domänenklassenspezifisch verarbeiten. –

+0

Änderung der gestrigen Kommentar: Werfen Sie einen Blick auf http://www.grails.org/plugin/falcone-util. Es bietet auch einen Ereignismechanismus für Hibernate-Ereignisse. –

Verwandte Themen