如何在Rails中查看整个HTTP请求

时间:2010-05-17 15:14:21

标签: ruby-on-rails logging

我有一个Rails应用程序,但经过一段时间的开发/调试后,我意识到能够在日志文件中查看整个HTTP请求非常有用 - log / development.log,而不仅仅是参数。

我还希望有一个基于用户的单独日志文件,而不是会话。

任何想法都将受到赞赏!

4 个答案:

答案 0 :(得分:38)

您可以通过以下方式快速查看视图中的request.env:

  • 查看:<%= request.env.inspect%>

如果您希望从控制器中将其记录在开发日志中:

  • CONTROLLER :Rails.logger.info(request.env)

在这里,您可以看到Request对象的reference

Rails使用Ruby Standard Library中的Logger自动设置日志/目录中的文件记录。日志文件将根据您的环境进行命名,例如:登录/ development.log。

要从控制器或模型记录消息,请使用记录器方法访问Rails记录器实例:

class YourController < ActionController::Base
  def index
    logger.info request.env
  end
end

关于用户,您使用什么来验证它?

答案 1 :(得分:4)

logger.info request.env代码在Rails控制器中工作正常,但要查看更原始的版本,或者如果您使用的是Grape或其他已安装的应用程序,则必须在途中拦截请求机架中间件链...

将此代码放在lib目录中(或application.rb的底部):

require 'pp'
class Loggo
  def initialize(app)
    @app = app
  end
  def call(env)
    pp env
    @app.call(env)
  end
end

然后使用config中的其他application.rb

config.middleware.use "Loggo"

答案 2 :(得分:2)

您可以使用机架中间件在中间件​​看到它们时记录请求(由http服务器解析并由前面的中间件转换)。如果您的http服务器支持这样的功能,您还可以配置您的http服务器以记录完整请求。

http服务器(web服务器)负责接收http请求,解析它们,以及将数据结构传输到应用服务器(例如,机架应用程序)。应用程序服务器看不到原始请求,但会看到http-server发送的方式。

答案 3 :(得分:0)

我最初使用@AlexChaffee的代码片段,但我已经切换到使用mitmproxy,这是一个专门的HTTP代理,记录通过它的请求和响应。

当您控制发出请求的应用程序时,这显然只对开发方案有用。您可以使用生产应用程序的反向代理实现类似的结果(优点是您不必为此触摸Rails应用程序本身),但我没有研究过。