Как регистрировать конкретные данные запроса в журналах серверов 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 } ]