2012-07-16 88 views
8

我要爲我的web應用程序實現用戶活動日誌記錄(php + js + mysql)。記錄用戶活動的最佳做法是什麼?

Previousely,我用這個appoach:

  • 在用戶登錄在數據庫中創建一個臨時表來存儲用戶ID
  • 創建它使用用戶ID activity表中插入一行中的所有表上的觸發器從那張臨時表中刪除

現在我不想把太多的邏輯放在數據庫中,所以我的qiestion是:什麼是最佳實踐?我應該保持whith所描述的方法,還是應該使用一些(什麼?)另一個?

編輯

我見過this的問題,但我與一個在答案比較上述方法intrested。

EDIT2

爲什麼我需要的日誌:我需要知道,如果出現錯誤歸咎於其用戶=)

loggs必須包含更改的數據和新的數據,看看有什麼實際上已經改變。

將不會有很多用戶嘲笑它是一個企業應用程序,我們的公司不是那麼大。

主要問題是我應該在哪裏把日誌邏輯:數據庫或應用程序(PHP後端)級別?

+0

在尋找「最佳實踐」之前,您需要回答很多事情。爲什麼你需要日誌,這些日誌必須包含什麼,你期望每秒鐘登錄多少用戶,你打算如何使用這些日誌等,因爲它決定了你計劃部署的系統設置等。對於大多數用途,我真的沒有看到每次用戶做某事時寫入的簡單表格都有什麼問題。 – 2012-07-16 08:43:57

+0

@ N.B。做了一個編輯來回答你的一些問題,請看看 – k102 2012-07-16 08:48:56

回答

7

一如既往,「取決於」。

如果您的核心業務概念隨着時間的推移非常重要,它應該是數據庫設計中的一流概念,也是您的PHP邏輯。福勒在「Analysis patterns」中寫道。 這允許您捕獲誰對您的業務對象進行了哪些更改並回答問題,例如「誰在日期z中將項目從x類型更改爲y?」,「用戶x更改產品y的頻率?等等。它確實使領域模型更加複雜。

如果您不需要這種級別的集成,我的首選是將日誌記錄功能放在PHP中;觸發器有一種放慢數據庫速度的可怕方法,或者導致意想不到的副作用,或被開發人員更改架構而被遺忘。所以,在PHP中,我會包含顯式的「記錄這個」語句,可能使用面向方面的框架(儘管我從來沒有在PHP中使用過,只有在Java中)。

6

對於日誌記錄,您希望有一個表logs,其中您記錄會話ID $_SESSION['id'](假設您有會話?)和用戶的活動。然後,使用一個延遲MySQL查詢插入(因爲日誌不高優先級):

INSERT DELAYED INTO table (session_id, activity) VALUES ('1234', 'blah'); 

參考this link關於延遲插入的詳細信息。換句話說,把所有的邏輯放在PHP端,只需要一個MySQL表,你可以使用延遲記錄任何活動。這將是一個函數log_activity($ session_id,$ activity),您可以在有可登錄活動的任何地方調用該函數。

+0

hm ......感謝「延遲」,但這並不是我所要求的。 PLZ查看我的編輯 – k102 2012-07-16 08:54:35

+0

是的,這實際上就是你所要求的,而這正是你所需要的。 – Doa 2012-07-16 09:01:18

+0

'把所有的邏輯放在PHP端'爲什麼?我的意思是爲什麼它比數據庫邏輯更好? – k102 2012-07-16 09:12:37

相關問題