[sql] 콘솔에서 Rails SQL 로깅 비활성화

콘솔에서 명령을 실행할 때 SQL 쿼리 로깅을 비활성화하는 방법이 있습니까? 콘솔에서 명령을 사용하여 비활성화하고 다시 활성화 할 수 있다면 이상적입니다.

무언가를 디버깅하고 “puts”를 사용하여 관련 데이터를 인쇄하려고합니다. 그러나 SQL 쿼리 출력으로 인해 읽기가 어렵습니다.


편집 :
내 코드 이외의 것이 logger를 호출하려고 시도하면 로거를 nil로 설정하면 오류가 발생하기 때문에 다른 해결책을 찾았습니다.

로거를 설정하는 대신 로거 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 / environments / 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


답변

Rails 4의 경우 환경 파일에 다음을 넣을 수 있습니다.

# /config/environments/development.rb

config.active_record.logger = nil


답변

누군가가 실제로 로깅 수준을 변경하지 않고 AR 모델에서 로깅을 유지하면서 SQL 문 로깅 을 실제로 중단 하려는 경우 :

로그에 기록하는 행 (어쨌든 Rails 3.2.16에서)은 debugin에 대한 호출 입니다 lib/active_record/log_subscriber.rb:50.

해당 디버그 방법은에 의해 정의됩니다 ActiveSupport::LogSubscriber.

따라서 다음과 같이 덮어 써서 로깅을 중단 할 수 있습니다.

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end


답변

나는 이것을 사용했다 : config.log_level = :info
편집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.join("log", "development.log") )
    end
  end
end