2012-06-04 33 views
0

我目前在工作中使用Rails v2.3.5,对于语言和框架我都很新。我需要做的是在用户每次请求网页时(用户的IP地址,访问的URL,访问日期和时间以及页面呈现时间)捕获某些信息并将其存储在数据库中。如何拦截来自Rails记录器的信息?

我注意到所有这些信息都包含在默认的Rails日志文件中,但我试图避免必须解析日志文件来收集这些信息。我想要的是一些钩住记录器并拦截这些信息的方式,或者扩展记录器并使用我的扩展版本而不是默认的Rails(ActiveSupport :: BufferedLogger)。

也许有其他解决方案不需要日志?

在此先感谢。

+1

如果可能,请升级到Rails 2.3.14以避免[严重安全问题](https://groups.google.com/forum/?fromgroups#!topic/rubyonrails-security/dUaiOOGWL1k)。 – tadman

回答

0

您可能需要的是您的ApplicationController中的一个before_filter块,以执行您需要执行的任何操作。从那里你可以创建你需要的任何数据库记录。例如:

class ApplicationController < ActionController::Base 
    before_filter :log_user_info 

protected 
    def log_user_info 
    # Activate a custom logging method on a model 
    UserActivity.log!(
     # ... User parameters 
    ) 
    end 
end 

挂钩到记录器可能是一个坏主意,因为这是获取该信息的间接方式。不过,由于历史原因,您可能需要从中提取数据。

+0

我曾考虑类似的解决方案,但我不确定如何获得我需要的最后一个指标,即“页面渲染时间”。也许我可以在“before_filter”和“after_filter”之间进行时间计算,但时间会与日志中的时间不同。有没有一种直接的方式来花时间从控制器提供页面?感谢您的答复。 – Gabriel

+0

我还没有使用过'after_filter',但在这个特殊情况下值得考虑。我会看看如何生成日志条目以确定渲染时间值的存储位置。 Rails源代码通常非常简单。 – tadman

+2

@Gabriel - 还有一个'around_filter'。通过两个'Time.now'之间的'yield',使用它可以快速简单地完成你在这里描述的内容。干杯! –