Как просмотреть весь 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-приложения), но я не рассматривал это.