модуль ActiveRecord::QueryLogs
Журналы запросов Active Record
Автоматически добавляет комментарии к SQL-запросам с тегами информации о времени выполнения. Это может использоваться для отслеживания проблемных SQL-запросов до кода приложения, который сгенерировал эти запросы.
Журналы запросов могут быть включены через конфигурацию Rails в config/application.rb или в инициализаторе:
config.active_record.query_log_tags_enabled = true
По умолчанию регистрируется имя приложения, имя и действие контроллера или имя задания. Формат по умолчанию — SQLCommenter. Теги, отображаемые в комментарии к запросу, могут быть настроены через конфигурацию Rails:
config.active_record.query_log_tags = [ :application, :controller, :action, :job ]
Active Record определяет стандартные теги, доступные для использования:
-
application -
pid -
socket -
db_host -
database -
source_location
Action Controller добавляет стандартные теги при загрузке:
-
controller -
action -
namespaced_controller
Active Job добавляет стандартные теги при загрузке:
-
job
Новые теги комментариев могут быть определены, добавив их в Hash к тегам Array. Теги могут иметь динамическое содержимое, установив значение Proc или лямбда-значение в Hash, и могут ссылаться на любое значение, хранящееся Rails в объекте context. ActiveSupport::CurrentAttributes может использоваться для хранения значений приложения. Теги со значениями nil из комментария к запросу опускаются.
Выполняется экранирование строки, возвращаемой функцией, однако не следует использовать недоверенные данные пользователя.
Пример:
config.active_record.query_log_tags = [
:namespaced_controller,
:action,
:job,
{
request_id: ->(context) { context[:controller]&.request&.request_id },
job_id: ->(context) { context[:job]&.job_id },
tenant_id: -> { Current.tenant&.id },
static: "value",
},
]
По умолчанию имя приложения, имя и действие контроллера или имя задания регистрируются с использованием формата SQLCommenter. Это может быть изменено через config.active_record.query_log_tags_format
Комментарии тегов могут быть добавлены перед запросом:
ActiveRecord::QueryLogs.prepend_comment = true
Для приложений, где содержимое не будет меняться в течение срока действия запроса или выполнения задачи, теги могут быть кэшированы для повторного использования в каждом запросе:
config.active_record.cache_query_log_tags = true
Публичные методы класса
# File activerecord/lib/active_record/query_logs.rb, line 100
def update_formatter(format)
self.tags_formatter =
case format
when :legacy
LegacyFormatter.new
when :sqlcommenter
SQLCommenter.new
else
raise ArgumentError, "Formatter is unsupported: #{formatter}"
end
end Обновляет форматтер на указанный.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.