Programing

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

lottogame 2020. 4. 10. 08:07
반응형

콘솔에서 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

누군가가 실제로 로깅 수준을 변경하지 않고 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

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

# /config/environments/development.rb

config.active_record.logger = nil

나는 이것을 사용했다 : 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

참고로 Rails 2에서 할 수있는 일

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

do end원하는 경우 중괄호를 블록으로 바꿀 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/7759321/disable-rails-sql-logging-in-console

반응형