Подтвердить что ты не робот

Отключить ведение журнала Rails SQL в консоли

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

Я пытаюсь отлаживать что-то и использовать "puts" для печати некоторых релевантных данных. Однако вывод запроса sql затрудняет чтение.


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

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

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

Ответ 1

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

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

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

ActiveRecord::Base.logger = old_logger

Ответ 2

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

config.after_initialize do
  ActiveRecord::Base.logger = Rails.logger.clone
  ActiveRecord::Base.logger.level = Logger::INFO
end

Ответ 3

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

ActiveRecord::Base.logger.silence do
  # the stuff you want to be silenced
end

Ответ 4

В случае, если кто-то хочет на самом деле выбить ведение журнала 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

Ответ 5

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

# /config/environments/development.rb

config.active_record.logger = nil

Ответ 6

В Rails 3.2 я делаю что-то вроде этого в config/environment/development.rb:

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new("#{Rails.root}/log/development.log")
    end
  end
end

Ответ 7

Я использовал это: config.log_level = :info edit-in config/environments/performance.rb

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