2008-12-24 29 views
1

客戶希望我們「記錄」用戶在我們的系統上執行的「動作」:主要是創建,刪除和更新。 我已經有了一個記錄跟蹤的方面,但是它工作在相當低的級別上記錄每個方法調用。 因此,如果用戶點擊按鈕 「打開醫療檔案」 日誌內容如下:記錄用戶動作

  1. closePreviousFiles( 「零號病人」)
  2. createMedicalFile( 「零號病人」) - >文件#001
  3. changeStatus( 「#001」) - >開

而期望的結果是:

  1. 打開醫療文件#001爲患者ž ero

我正在考慮使用日誌語句來檢查Struts2的操作,但是我想知道...有沒有另外一種方法來做到這一點?我可能會再次使用AspectJ(或過濾器)並將邏輯保存在一個地方,以便我可以輕鬆配置日誌,但是恐怕一切都會變得更難理解(即「此操作的日誌記錄錯誤......我應該在哪裏尋找麻煩?「)。

回答

2

聽起來像您的客戶想要審覈系統中用戶操作的蹤跡。

請考慮在每個操作的入口點(來自Web請求)啓動一個帶有操作的枚舉/常量的審計條目。用可能的用戶提供的信息填充它。

在退出/最後,在審覈中表明它是成功還是失敗。 僞代碼的一個例子:

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(); 
    } 
} 

這裏重要的是,所有的用戶操作保存,不管成功還是失敗的。此外,客戶確實需要知道所有相關信息和行動。

由於我們正在記錄動作常量和數據,審計到客戶端的表示可以單獨進行編碼。您也可以獲得靈活性,因爲在行動的時候並沒有確定表示字符串的變化(例如,「打開醫療文件#001,病人爲零」到「病人零號#001醫療文件打開」),不得不重新審覈審計數據。

1

我最近後處理的日誌生成摘要。您可能需要考慮這種方法,特別是如果上述日誌中的#2和#3生成在不同的地方,並且所需的結果將需要將狀態從一個地方帶到另一個地方。

+0

實際上,我的一個主要擔心是將日誌記錄邏輯保存在一個地方需要傳遞會話和任何給定的參數集......後處理實際上是一個有趣的選項! – 2008-12-24 11:41:25

+0

很高興我能有用。對於Struts和AspectJ,我有點猶豫不決,對Struts和AspectJ幾乎一無所知:-) – 2008-12-24 12:16:26

1

如果您正在處理醫療數據,您可能需要考慮日誌記錄和版本控制。我甚至會考慮用數據庫觸發器來做這件事。我不做很多Java編程,但我已經與我們的學生信息系統團隊討論過這個問題。他們在後端使用Oracle,並使用他們的連接註冊會話變量。其觸發器使用此會話變量創建關鍵表的日誌條目和版本歷史記錄(更新/刪除)。這爲他們提供了審計和回滾功能。我認爲這些對於醫療記錄應用都是有用的。

它們也使用log4j來執行應用程序級別的日誌記錄,但數據記錄發生在數據庫中。

1

我在Struts2中做了類似的事情,我用了「log4j」。根據您的應用程序服務器,它可能有一個允許使用消息目錄(例如:Weblogic)的集成日誌記錄系統。