Включить информацию о параметрах/запросах в Rails logger?

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

#config/environments/production.rb
config.logger = Logger.new(config.log_path)
config.log_level = :error
config.logger.level = Logger::ERROR

#config/environment.rb
class Logger
  def format_message(level, time, progname, msg)
    "**********************************************************************\n#{level} #{time.to_s(:db)} -- #{msg}\n"
  end  
end

Итак, я могу настроить сообщение отлично, но я, похоже, не могу получить доступ к переменным params/request здесь. Кто-нибудь знает, возможно ли это, и если да, то как? Или, если есть лучший способ получить эту информацию? (Возможно, даже что-то основано на Редисе?)

Благодаря нагрузкам,

Dan

Ответы

Ответ 1

(Ответ на долгое время после этого был задан, но, возможно, это поможет другому человеку.)

Я просто сделал что-то подобное.

1) вам необходимо переопределить свой регистратор отдельно от сведений о запросе на листинг. Похоже, вы решили настроить свой регистратор. Ответ здесь: Конфигурация строки формата журнала Rails

2) Я регистрирую запрос и ответ всех запросов в свою службу. Обратите внимание, что Rails помещает тонну материала в заголовки, так что просто сбрасывать запрос или заголовки, вероятно, плохая идея. Также обратите внимание, что мое приложение в основном доступно через API. Если у вас в основном веб-приложение, как я предполагаю, большинство людей, вы, вероятно, не хотите проверять response.body, поскольку он будет содержать ваш html.

class ApplicationController < ActionController::Base 
  around_filter :global_request_logging
...
  def global_request_logging 
    http_request_header_keys = request.headers.keys.select{|header_name| header_name.match("^HTTP.*")}
    http_request_headers = request.headers.select{|header_name, header_value| http_request_header_keys.index(header_name)}
    logger.info "Received #{request.method.inspect} to #{request.url.inspect} from #{request.remote_ip.inspect}.  Processing with headers #{http_request_headers.inspect} and params #{params.inspect}"
    begin 
      yield 
    ensure 
      logger.info "Responding with #{response.status.inspect} => #{response.body.inspect}"
    end 
  end 
end

Ответ 2

Это должно сработать!:) приветствия.

logger.info({:user_agent => request.user_agent, :remote_ip => request.remote_ip}.inspect)

logger.info(params.inspect)

By by.. Это должно быть помещено в действие ваших контроллеров. Пример: если вы разместите его в своем действии create, он также должен зарегистрировать user_agent в браузере, remote_ip i.e удаленный ip пользователя и все параметры.