记录在rails中使用默认路由

Bla*_*lor 6 logging routing production routes ruby-on-rails

我试图从生产rails应用程序中删除"catch all"或"default"路由.我有兴趣在收集其使用日志的同时维护操作,以便我可以用适当的硬编码路由替换它.

所以,鉴于我的文件中有以下默认路由行config/routes.rb.

match '/:controller(/:action(/:id))'
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建或检索每次路由被击中的日志.理想情况下,此日志仅包括此路由实际处理的请求以及参数,并且需要使路由本身正常运行.

mya*_*abc 8

另一种可能性是使用Rails路由器constraints选项:

match '/:controller(/:action(/:id))', constraints: -> (req) {
  Rails.logger.info("Default route used: #{req.path.inspect}")
  true
}
Run Code Online (Sandbox Code Playgroud)

注意:lambda返回true,以便匹配成功.


Don*_*ank 7

您可以这样做的一种方法是将默认路由更改为:

match ':controller(/:action(/:id))(.:format)', :using_default_route => true
Run Code Online (Sandbox Code Playgroud)

然后将以下功能放入 app/controllers/application_controller.rb

before_filter do
  if params[:using_default_route]
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}")
  end
end
Run Code Online (Sandbox Code Playgroud)