Frage

Der Kunde will, dass wir „log“ die „Aktionen“, dass ein Benutzer auf unserem System ausführt: Erstellen, Löschen und Aktualisierung, meistens. Ich habe bereits einen Aspekt, den die Trace protokolliert, aber das funktioniert auf einem ziemlich niedrigen Niveau jeden Methodenaufruf anzumelden. Also, wenn ein Benutzer auf die Schaltfläche „Öffnen medizinische Datei“ geklickt würde das Protokoll lesen:

  1. closePreviousFiles ( "Patient Null")
  2. createMedicalFile ( "Patient Null") -> Datei # 001
  3. Change ( "# 001") -> open

, während das gewünschte Ergebnis ist:

  1. medizinische Akte # 001 geöffnet für Patienten Null

Ich denke die Struts2 Aktionen mit Protokollerklärung der instrumentiert, aber ich frage mich ... ist es eine andere Möglichkeit, das zu tun? Ich könnte AspectJ wieder verwenden (oder ein Filter) und die Logik halten nur an einer Stelle, so dass ich das Protokoll leicht konfigurieren kann, aber dann werde ich habe Angst, alles schwerer zu verstehen (dh „das Protokoll für diese Aktion ist falsch ... wo zum Teufel soll mich für die Mühe aussehen? ").

War es hilfreich?

Lösung

Klingt wie Ihr Kunde einen Prüfpfad von den Aktionen des Benutzers im System will.

Betrachten sie an jedem Eintrittspunkt der Aktion (von der Web-Anfrage), dass ein Überwachungseintrag mit einer Enum / constant auf der Aktion zu starten. Füllen Sie es mit Informationen Benutzer, wenn möglich zur Verfügung gestellt hat.

Bei der Ausfahrt / schließlich im Prüfungs wenn es erfolgreich war oder fehlgeschlagen ist. Ein Beispiel in Pseudo-Code:

enum Actions {
  OPEN_MEDICAL_FILE
  ...
}

void handleRequest(...) {
  String patient = ...;
  Audit audit = new Audit(OPEN_MEDICAL_FILE);
  audit.addParameter("patient", patient);
  try {
     ... more things ..
     audit.addParameter("file", "#001");
     ... more things ...
     audit.setSuccess();
  } finally {
    audit.save();
  }
}

Was ist hier wichtig ist, dass alle Benutzeraktionen gespeichert sind, unabhängig von Erfolg oder Misserfolg. Außerdem muß der Kunde wirklich, wirklich alle relevanten Informationen zusammen mit der Aktion kennen.

Da wir Aktion Konstanten und Daten protokollieren, kann die Präsentation der Prüfung an den Client separat codiert werden. Sie gewinnen auch Flexibilität, da eine Änderung der Darstellung String (z. B. „geöffnet medizinische Datei # 001 für Patienten Null“ auf „Patient Null # 001 medizinische Datei geöffnet) nicht zum Zeitpunkt der Aktion bestimmt, aber später. Sie don‘ t haben, um die Audit-Daten remassage.

Andere Tipps

Ich habe vor kurzem nachbearbeitet Protokolle Zusammenfassung zu erzeugen. Möglicherweise möchten Sie diesen Ansatz berücksichtigen, vor allem, wenn # 2 und # 3 in den oben genannten Protokolle an verschiedenen Orten erzeugt werden und das gewünschte Ergebnis um Zustand von einem Ort zum anderen tragen müssten.

Wenn Sie mit medizinischen Daten arbeiten können Sie sowohl die Protokollierung und Versionierung zu betrachten. Ich würde denken, auch über diese Trigger mit Datenbank zu tun. Ich habe nicht viel von Java-Programmierung tun, aber ich habe dieses sehr Problem mit unserem Student Information System Team diskutiert. Sie verwenden Oracle auf das Backend und registrieren eine Session-Variable mit ihren Verbindungen. Deren Auslöser verwenden diese Session-Variable Protokolleinträge und Versionshistorien zu erstellen (auf Updates / löscht) der kritischen Tabellen. Dies gibt ihnen die beiden Auditierung und Rollback-Funktionen. Ich würde denken, dass diese beide für eine medizinische Aufzeichnungen Anwendung nützlich sein würden.

Sie verwenden auch log4j Anwendungsebene Protokollierung zu tun, aber die Datenerfassung erfolgt in der Datenbank.

Ich habe ähnliche Sachen in Struts2 Aktionen getan, habe ich „log4j“. Je nach Ihrem Application Server, könnte es ein integriertes Logging-System hat die Verwendung von Nachrichtenkatalogen ermöglicht (z .: Weblogic).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top