Есть ли способ отключить ведение журнала SQL-запросов, когда я выполняю команды в консоли? В идеале было бы здорово, если бы я мог просто отключить его и снова включить его с помощью команды в консоли.
Я пытаюсь отлаживать что-то и использовать "puts" для печати некоторых релевантных данных. Однако вывод запроса sql затрудняет чтение.
Edit: Я нашел другое решение, поскольку установка регистратора на nil иногда вызывала ошибку, если что-то, кроме моего кода, пыталось вызвать logger.warn
Вместо установки регистратора на nil
вы можете установить уровень регистратора на 1
.
ActiveRecord::Base.logger.level = 1 # or Logger::INFO
Чтобы отключить его:
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
Чтобы включить его:
ActiveRecord::Base.logger = old_logger
Вот вариация, которую я считаю несколько более чистым, что все же позволяет потенциально другому каротажу от AR. В config/environment/development.rb:
config.after_initialize do
ActiveRecord::Base.logger = Rails.logger.clone
ActiveRecord::Base.logger.level = Logger::INFO
end
Это может быть не подходящее решение для консоли, но у Rails есть метод для этой проблемы: Logger # silence
ActiveRecord::Base.logger.silence do
# the stuff you want to be silenced
end
В случае, если кто-то хочет на самом деле выбить ведение журнала 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
Rails.logger.debug
журнала SQL без влияния на операторы Rails.logger.debug
.
Для Rails 4 вы можете поместить следующее в файл среды:
# /config/environments/development.rb
config.active_record.logger = nil
Я использовал это: config.log_level = :info
edit-in config/environments/performance.rb
Отлично работает для меня, отклоняя вывод SQL и показываю только рендеринг и важную информацию.
В 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
since setting the logger to nil sometimes raised an error
yap .. Я получил это при попытке запуститьrake db:migrate
stackoverflow.com/questions/1719212/…