访问ActiveSupport :: LogSubscriber子类中的Rails请求

我试图制作一些自定义Rails记录器,最终将记录到数据库。 但是,我无法访问请求对象之类的东西,我非常希望这样。

我目前正在尝试使用LogSubscriber(通知)接口来完成大部分工作; 也许这不是正确的方法。 我知道我可以滥用Thread.current []但我希望避免这样做。

这是我的代码,它是基本的,我可以得到它的一个例子。 这是在初始化程序中加载的。

module RequestLogging class LogSubscriber < ActiveSupport::LogSubscriber def process_action(event) pp request # <--- does not work pp event end end RequestLogging::LogSubscriber.attach_to :action_controller 

可能您需要在ActionController :: Instrumentation中覆盖process_action ,然后可以像event.payload[:request]一样访问请求对象。 我想你可以在config/initializers放置代码,代码示例:

 ActionController::Instrumentation.class_eval do def process_action(*args) raw_payload = { controller: self.class.name, action: self.action_name, params: request.filtered_parameters, format: request.format.try(:ref), method: request.method, path: (request.fullpath rescue "unknown"), request: request, session: session } ActiveSupport::Notifications.instrument("start_processing.action_controller", raw_payload.dup) ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload| result = super payload[:status] = response.status append_info_to_payload(payload) result end end end