2012-06-06 29 views
0

我想寫一個日誌模型和控制器,記錄用戶所做的一切。我正在考慮用ip地址,用戶調用的控制器,查看顯示的和params.inspect來創建數據庫表。如何將審計線索記錄到數據庫?

是否有一種方法可以獲得當前正在使用哪個控制器的變量?部署這個最好的方法是什麼?有沒有一個寶石可以做到這一切? 謝謝

回答

2

如果您將生產中的日誌級別設置爲:調試,那麼每個請求都會記錄您所需的信息。也許,編寫調試生產日誌的解析器可能會更容易。

如果你願意,你也可以將過濾器添加到您的ApplicationController:

class ApplicationController 
    before_filter :log_activity 

    def log_activity 
    if Rails.env == 'production' 
     @logger ||= Logger.new("#{Rails.root}/log/activity.log") 
     values = [ 
     request.remote_ip, 
     controller_name, 
     action_name, 
     params.inspect 
     ] 
     @logger.info "#{values.join ' | '}" 
    end 
    end 

    ... 
end 

,只要你想輸出更詳細的,這可能是不完整的,但是這是想法。

+0

不是'params'已經包含控制器名稱和操作名稱?看起來像冗餘。順便說一下,你確定'controller.name'。我相信它必須是'controller_name'。 – jdoe

+0

事實上,這些信息已經包含在params散列中,但是從那裏解析(比方說)grep並不是很容易。從rails指南的相關部分:http://guides.rubyonrails.org/action_controller_overview.html#routing-parameters – moritz

+0

我認爲,只要日誌記錄已經有控制器/操作名稱,就可以將它們從params中排除:' params.except(:controller,:action).inspect'。 – jdoe

相關問題