2012-06-06 22 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

相关问题