Изменить уровень логирования в Production?

Привет!

Сейчас я пытаюсь отладить медленные запросы, которые возникают только в средах, работающих в режиме production. Я заметил, что уровень логирования, похоже, зафиксирован в коде для режима production (ссылка на код), и нет возможности напрямую его настроить. Я хотел бы временно изменить уровень логирования на debug, чтобы увидеть больше информации. Есть ли способ это сделать?

Я пробовал несколько довольно «костыльных» решений, меняя уровень логирования во время работы через консоль Rails, но ни один из этих «костылей» не привел к появлению запросов к базе данных в логах отладки (хотя если я вручную создавал записи отладки с помощью Rails.logger.debug в консоли Rails, они появлялись после применения этих решений).

Спасибо!

P.S. Чтобы развеять возможные опасения по поводу моего замечания выше о проблемах, возникающих только в средах production, скажу, что я использую Discourse довольно нестандартным образом, с большим количеством категорий. Проблемы, с которыми я сталкиваюсь, вероятно, не встречаются ни в одном другом экземпляре Discourse. :slight_smile:

Это меня недавно сбивает с толку.

image

Я подтвердил, что уровень логирования установлен в info, но ни одно из:

Rails.logger.info "blah blah blah"

не отображается, а /errors упорно остаётся на warn — что я упускаю?

У кого-нибудь есть решение этой проблемы?

Это очень раздражает

image

… однако я не вижу логирование уровня Info в /logs!

Переключение на «info» ничего не меняет:

Непонятно, как мы должны диагностировать определённые типы проблем, возникающие только в Production, без этого … :sweat_smile:

Что блокирует логи уровня Info?

Ещё несколько попыток, которые я предпринял:

  • Я проверил production.log, и нужные мне логи уровня info там есть!
  • Я посмотрел вывод Logster.config в консоли Rails, но он явно не помогает.
  • То же самое для /vendor/bundle/ruby/3.2.0/gems/logster-2.19.1/lib/logster/configuration.rb.

Поэтому я до сих пор не понимаю, почему логи уровня info не отображаются в /logs.

Очевидно, что где-то между production.log и Logster происходит фильтрация логов уровня info.

Если я правильно понимаю, в режиме production подавление логов уровня info и debug происходит намеренно. Blaming logster/lib/logster/rails/railtie.rb at main · discourse/logster · GitHub

store.level = Logger::Severity::WARN if Rails.env.production?

Из блога

В режиме production он агрегирует похожие ошибки, используя отпечатки трассировок, отслеживая предупреждения, ошибки и фатальные сообщения. Цель — отображать список открытых проблем приложения, которые можно каким-то образом решить.

В режиме разработки он предоставляет полный поток всех логов, генерируемых Rails (уровень debug и выше). Это даёт значительные преимущества перед консолью, так как у вас есть полный доступ к трассировкам стека для каждой строки лога.

Спасибо.

Логично для стандартного случая.

Однако это кажется необоснованно ограничительным, и для особых ситуаций должна быть возможность настройки?

Это касается случаев, когда в продакшене возникают пограничные ситуации, которые вы хотите расследовать.