Как просмотреть весь HTTP-запрос в Rails

У меня есть приложение Rails, но через некоторое время разработки/отладки я понял, что было бы очень полезно увидеть весь HTTP-запрос в logfiles - log/development.log, а не только параметры.

Я также хочу иметь отдельный файл журнала на основе пользователя, а не сеанса.

Любые идеи будут оценены!

ангел

Ответы

Ответ 1

Вы можете быстро просмотреть request.env в виде через:

  • ПРОСМОТР: <% = request.env.inspect% >

Если вместо этого вы хотите зарегистрировать его в журнале разработки, с вашего контроллера:

  • КОНТРОЛЛЕР: Rails.logger.info(request.env)

Здесь вы можете увидеть ссылку для объекта Request.

Rails автоматически устанавливает ведение журнала в файл в каталоге log/, используя Logger из стандартной библиотеки Ruby. Файл журнала будет называться соответствующим вашей среде, например. войти /development.log.

Чтобы зарегистрировать сообщение от контроллера или модели, обратитесь к экземпляру журнала Rails с помощью метода журнала:

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

О пользователе, что вы используете для его аутентификации?

Ответ 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

а затем с другим config в application.rb:

config.middleware.use "Loggo"

Ответ 3

Вы можете использовать промежуточное программное обеспечение стойки для регистрации запросов по мере того, как их видит промежуточное ПО (как это анализируется http-сервером и преобразуется предыдущим промежуточным программным обеспечением). Вы также можете настроить свой http-сервер для регистрации полных запросов, если ваш http-сервер поддерживает такую ​​функцию.

HTTP-сервер (веб-сервер) отвечает за прием HTTP-запросов, их разбор и передачу данных на сервер приложений (например, приложение в стойке). Сервер приложений не видит исходный запрос, но видит, что отправляет его http-сервер.

Ответ 4

Я изначально использовал фрагмент кода от @AlexChaffee, но с тех пор я перешел на использование mitmproxy, специализированного прокси-сервера HTTP который записывает запросы и ответы, проходящие через него.

Это, очевидно, полезно только для сценариев разработки, когда вы управляете приложениями, делающими запросы. Вы могли бы достичь аналогичных результатов с помощью обратного прокси-сервера для производственных приложений (преимущество в том, что вам не нужно касаться самого Rails-приложения), но я не рассматривал это.