programing

콘솔에서 Rails SQL 로깅 사용 안 함

minimums 2023. 4. 13. 20:42
반응형

콘솔에서 Rails SQL 로깅 사용 안 함

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

디버깅을 시도하고 "puts"를 사용하여 관련 데이터를 출력하려고 합니다.그러나 sql 쿼리 출력으로 인해 읽기 어렵습니다.


편집: 로거를 0으로 설정하면, 코드 이외의 것이 로거를 호출하려고 하면, 에러가 발생하는 경우가 있기 때문에, 다른 해결 방법을 찾았습니다.경고하다

로거를 로거로 설정하는 대신nil로거의 레벨을 다음과 같이 설정할 수 있습니다.1.

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

끄려면:

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

다시 켜려면:

ActiveRecord::Base.logger = old_logger

콘솔에는 적합하지 않을 수 있지만 Rails에는 이 문제에 대한 방법이 있습니다.로거 #사일런트

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

다음은 AR로부터의 다른 잠재적인 로깅을 허용하는 좀 더 깔끔한 변형입니다.구성/환경/개발.rb:

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

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

# /config/environments/development.rb

config.active_record.logger = nil

(로깅 수준을 변경하지 않고 AR 모델에서 로깅을 유지하면서) 실제로 SQL 문의 로깅을 녹아웃하려는 경우:

로그에 쓰는 행(어쨌든 Rails 3.2.16)은,debuglib/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에서는 구성/환경/개발에서 다음과 같은 작업을 수행합니다.rb:

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new( Rails.root.join("log", "development.log") )
    end
  end
end

참고로 레일 2에서는 다음과 같은 작업을 수행할 수 있습니다.

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

확실히, 곱슬곱슬한 괄호는do end차단할 수 있습니다.

액티브 레코드 6.0.3.3을 사용하고 있는데ActiveSupport::LoggerSilence

include ActiveSupport::LoggerSilence

ActiveSupport::LoggerSilence.silence do
    ## everything you want to silence
end

그러나 이는 SQL 테이블의 작성 또는 삭제와 관련된 다음과 같은 작업에는 적용되지 않았습니다.ActiveRecord::Migration.drop_table. 이를 침묵시키기 위해 다음과 같이 덧붙였습니다.

ActiveRecord::Schema.verbose = false

ActiveRecord 6를 위해 이 문제를 풀어야 했습니다.그리고 제가 대답한 것은fakeleft의 응답은 정확하지 않았습니다.네스트된 뷰의 로깅 등 다른 로깅을 억제하고 있었기 때문입니다.내가 한 일은 창조된 것이다.config/initializers/activerecord_logger.rb:

# Suppress SQL statement logging if necessary
# This is a dirty, dirty trick, but it works:
if ENV["ACTIVERECORD_HIDE_SQL"].present?
  module ActiveRecord
    class LogSubscriber
      def sql(event)
      end
    end
  end
end

AR 6의 로그 서브스크라이버에는sql숨기고 싶은 이벤트이기 때문에 이 이벤트는 생략할 수 있습니다.

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

반응형