Отключите Rails SQL logging в консоли - PullRequest
236 голосов
/ 13 октября 2011

Есть ли способ отключить ведение журнала запросов SQL, когда я выполняю команды в консоли? В идеале было бы здорово, если бы я мог просто отключить его и снова включить с помощью команды в консоли.

Я пытаюсь что-то отладить и использую «Put» для вывода некоторых важных данных. Однако вывод SQL-запроса затрудняет чтение.


Edit: Я нашел другое решение, так как установка логгера на ноль иногда приводила к ошибке, если что-то кроме моего кода пыталось вызвать logger.warn

Вместо установки регистратора на nil вы можете установить уровень регистратора на 1.

ActiveRecord::Base.logger.level = 1 # or Logger::INFO

Ответы [ 8 ]

275 голосов
/ 14 октября 2011

Чтобы отключить:

old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil

Чтобы включить его:

ActiveRecord::Base.logger = old_logger
66 голосов
/ 08 ноября 2011

Вот вариант, который я считаю несколько более чистым, который по-прежнему позволяет вести другие журналы из AR.В config / средах / development.rb:

config.after_initialize do
  ActiveRecord::Base.logger = Rails.logger.clone
  ActiveRecord::Base.logger.level = Logger::INFO
end
51 голосов
/ 04 декабря 2012

Возможно, это не подходящее решение для консоли, но в Rails есть метод решения этой проблемы: Logger # silence

ActiveRecord::Base.logger.silence do
  # the stuff you want to be silenced
end
12 голосов
/ 31 января 2015

В случае, если кто-то хочет на самом деле отключить ведение журнала операторов SQL (без изменения уровня ведения журнала и при сохранении ведения журнала в своих моделях AR):

Строка, записывающая в журнал(в любом случае в Rails 3.2.16) это вызов debug в lib/active_record/log_subscriber.rb:50.

Этот метод отладки определяется как ActiveSupport::LogSubscriber.

Так что мы можем отключить ведение журналапереписав это так:

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end
11 голосов
/ 29 марта 2016

Для Rails 4 вы можете поместить в файл среды следующее:

# /config/environments/development.rb

config.active_record.logger = nil
7 голосов
/ 14 декабря 2016

Я использовал это: config.log_level = :info редактирование config/environments/performance.rb

Отлично работает для меня, отклоняет вывод SQL и показывает только рендеринг и важную информацию.

4 голосов
/ 06 февраля 2013

В Rails 3.2 я делаю что-то подобное в config / environment / development.rb:

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new( Rails.root.join("log", "development.log") )
    end
  end
end
0 голосов
/ 17 мая 2019

Так же, как к вашему сведению, в Rails 2 вы можете сделать

ActiveRecord::Base.silence { <code you don't want to log goes here> }

Очевидно, что фигурные скобки можно заменить на блок do end, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...