【问题标题】:How do I see the whole HTTP request in Rails如何在 Rails 中查看整个 HTTP 请求
【发布时间】:2011-02-20 11:18:33
【问题描述】:

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

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

任何想法都将不胜感激!

【问题讨论】:

    标签: ruby-on-rails logging


    【解决方案1】:

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

    • 查看

    如果您想将其记录在开发日志中,请从您的控制器:

    • 控制器:Rails.logger.info(request.env)

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

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

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

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

    关于用户,你用什么来认证它?

    【讨论】:

    • 您好,谢谢您的回复,真的很有帮助。我正在使用 authlogic 进行身份验证。
    • ...那么 logger.info current_user.inspect 将是你的朋友 ;) .
    • 这会返回一个无法使用的大字符串,我无法想象这是任何人都在寻找的......
    【解决方案2】:

    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中的其他configs 一起:

    config.middleware.use "Loggo"
    

    【讨论】:

    • 旁白:pp的输出在这个中间件方案中去哪里了?
    • 输出到$stdout,所以通常情况下你会在rails服务器启动的控制台中看到它
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      我最初使用的是 @AlexChaffee 的代码 sn-p,但后来我改用 mitmproxy,这是一个专门的 HTTP 代理,用于记录通过它的请求和响应。

      这显然只在您控制发出请求的应用程序时对开发场景有帮助。您可能能够使用生产应用程序的反向代理来获得类似的结果(优点是您不必为此接触 Rails 应用程序本身),但我还没有研究过。

      【讨论】:

        猜你喜欢
        • 2014-10-07
        • 2022-09-23
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-04
        • 1970-01-01
        相关资源
        最近更新 更多