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

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

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

任何想法将不胜感激!

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

  • VIEW :<%= request.env.inspect%>

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

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

在这里,您可以看到Request对象的引用 。

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

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

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

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

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 

然后使用application.rb的其他config

 config.middleware.use "Loggo" 

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

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

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

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