Как регистрировать конкретные данные запроса в журналах серверов rails

Мне обычно не нравится напрямую спрашивать, как что-то сделать, не зная, что происходит, но я довольно новичок в рельсах, и мне трудно справиться с этим.

В принципе, мне нужно записать следующую информацию для каждого запроса в одном операторе журнала (если это возможно)

Дата записи в журнал Время входа в журнал Метод HTTP URL запрошен Порт IP-адрес запрашивающего Пользовательский агент запрашивающего Ссылка на URL Код ответа HTTP имя хоста

Какой предпочтительный способ настройки формата журнала? Можно ли просто изменить существующие журналы и передать им эту информацию? Или мне нужно будет расширять и перезаписывать поведение, в котором я нуждаюсь?

Мне не нужно, чтобы это было сохранено в другом файле журнала или что-то еще, просто выведите на STDOUT по каждому запросу.

Любая помощь с этим будет принята с благодарностью.

Спасибо!

Ответ 1

Я считаю, что большинство, если не все, запрошенной вами информации можно найти в заголовках запроса и ответе. Информация о том, как добавить это к журналам, была ответила до, но в основном вы можете использовать around_filter в ApplicationController для регистрации информации, которая вас интересует, в форме заголовков запросов. Например, здесь, как вы можете зарегистрировать агент пользователя из кода запроса и статуса из ответа:

class ApplicationController < ActionController::Base 
  around_filter :global_request_logging

  def global_request_logging 
    logger.info "USERAGENT: #{request.headers['HTTP_USER_AGENT']}"
    begin 
      yield 
    ensure 
      logger.info "response_status: #{response.status}"
    end 
  end 
end

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

  • lograge - заменяет регистрацию Rails по умолчанию на одну строку, вывод значения ключа, но еще не выполняет параметры запроса
  • scrolls - более общий контекстный, ключевой

Ответ 2

Я знаю, что это старый вопрос, но для будущих людей, которые наткнулись на это, я считаю, что предпочтительным подходом в Rails 3.2+ было бы использование ActiveSupport:: TaggedLogging. Сообщение в блоге, представляющее это, здесь

И быстрый пример, который добавляет субдомен, UUID для каждого запроса и агент пользователя для каждого сообщения журнала. Вы можете поместить это в файл инициализации среды.

config.log_tags = [ :subdomain, :uuid, lambda { |request| request.user_agent } ]