Включить параметры / запросить информацию в Rails logger? - PullRequest
13 голосов
/ 19 апреля 2010

Я пытаюсь добавить больше информации в мои журналы 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 здесь. Кто-нибудь знает, возможно ли это, и если да, то как? Или есть ли лучший способ получить эту информацию? (Возможно, даже что-то основанное на Redis?)

Спасибо большое,

Dan

Ответы [ 3 ]

25 голосов
/ 06 марта 2011

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

Я только что сделал нечто подобное.

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

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
3 голосов
/ 19 апреля 2010

Это должно работать! :) ура.

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

logger.info(params.inspect)

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

0 голосов
/ 19 апреля 2010

вы должны посмотреть в классе запроса

вроде ставит request.uri.

проверьте здесь для более подробной информации http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html

...