[英]Keep a log of user events in rails
我目前正在嘗試為我的rails應用程序的管理部分實現日志。 這將允許管理員查看用戶執行了什么操作以及何時執行。 例如'用戶添加了新地址','用戶將他們的郵政編碼從X更新為Y'。
由於每個動作都可能涉及許多模型,而不僅僅是用戶,我創建了一個日志模型,其中包含所有其他系統模型ID,消息和日志代碼的字段。
class CreateLogs < ActiveRecord::Migration
def self.up
create_table :logs do |t|
t.integer :user_id
t.integer :marker_id
t.integer :administrator_id
t.integer :group_id
t.integer :assignment_id
t.integer :submission_id
t.integer :code
t.text :message
t.timestamps
end
end
def self.down
drop_table :logs
end
end
我擔心的是,例如,用戶可以(讓我們說)在他們的帳戶中添加一個作業,它會被記錄為
Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')
(某處代碼342對應於'用戶創建了新地址',因此不需要消息)
顯然,在日志視圖中,我可以從日志ID /詳細信息中提取相關用戶和地址信息,但是如果要刪除此用戶或地址,則所有信息都將不可用,因此回顧日志,條目將是基本沒用。
必須有更好的方法或某些東西來幫助記錄這樣的系統事件並應對潛在的刪除。
或者,我可以將整個條目存儲為文本消息,但這不是非常糟糕並且不必要地填滿數據庫嗎?
如果其中任何一個不清楚,請告訴我,只需要記錄日志應用程序操作/事件之前已經完成!
謝謝,
皮特
看看ActiveRecord版本控制中列出的寶石,它可能就是您所需要的。
我認為你使用原始文本而不是(或除了)ID之前就找到了一個很好的解決方案。 如果您要存儲用戶名和地址,則可能不會破壞任何存儲容量。 這幾乎就是日志文件的作用; 它吐出了誰做了什么,何時發生了什么。 我認為它根本不會妨礙你的數據庫在文本中存儲一些額外的數據。 但是,如果確實變大了,你可以隨時保留最后幾周的日志。 也許有某種工作可以清除任何超過4周的日志文件。 但這主要取決於你的日志記錄水平:如果你記錄用戶所做的每一個動作,那么這就變得非常大了。 如果您只對關鍵事件感興趣(用戶登錄/注銷,創建/更新/刪除某些內容等等),那么我認為您可以很好地存儲文本並每隔一段時間清理一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.