복붙노트

[RUBY-ON-RAILS] 콘솔 안 함 레일 SQL 로깅

RUBY-ON-RAILS

콘솔 안 함 레일 SQL 로깅

내가 콘솔에서 명령을 실행하고있어 비활성화 SQL 쿼리 로깅하는 방법은 무엇입니까? 난 그냥 그것을 해제 할 수 있습니다 콘솔에서 명령을 재 활성화하면 이상적으로, 그것은 좋은 것입니다.

나는 몇 가지 관련 데이터를 인쇄하는 "풋"을 사용하여 디버그 뭔가 노력하고 있어요. 그러나, SQL 쿼리의 출력을 읽을 열심히하고 있습니다.

편집하다: 전무 때때로 로거를 설정하면 오류가 발생하기 때문에 내 코드 이외의 다른 통화의 logger.warn에 시도하면 나는 또 다른 해결책을 발견

대신 1로 로거의 레벨을 설정할 수 있습니다 전무로 로거를 설정.

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

해결법

  1. ==============================

    1.를 끄려면 :

    를 끄려면 :

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

    그것을 다시 켜려면 :

    ActiveRecord::Base.logger = old_logger
    
  2. ==============================

    2.다음은 여전히 ​​AR 잠재적 다른 로깅을 할 수 있습니다 내가 다소 청소기 고려 변화가 있습니다. 에서 설정 / 환경 / development.rb :

    다음은 여전히 ​​AR 잠재적 다른 로깅을 할 수 있습니다 내가 다소 청소기 고려 변화가 있습니다. 에서 설정 / 환경 / development.rb :

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

    3.이것은 콘솔에 적합한 솔루션이 아닐 수도 있지만, 레일은이 문제에 대한 방법이 있습니다 로거 # 침묵을

    이것은 콘솔에 적합한 솔루션이 아닐 수도 있지만, 레일은이 문제에 대한 방법이 있습니다 로거 # 침묵을

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

    4.레일 4를 들어 당신은 환경 파일에 다음을 넣을 수 있습니다 :

    레일 4를 들어 당신은 환경 파일에 다음을 넣을 수 있습니다 :

    # /config/environments/development.rb
    
    config.active_record.logger = nil
    
  5. ==============================

    5.경우에는 누군가가 실제로 SQL 문 로깅을 노크하고 싶어 (로깅 수준을 변경하지 않고, 자신의 AR 모델에서 로깅을 유지하면서)

    경우에는 누군가가 실제로 SQL 문 로깅을 노크하고 싶어 (로깅 수준을 변경하지 않고, 자신의 AR 모델에서 로깅을 유지하면서)

    50 : (어쨌든, 레일 3.2.16)에 로그에 기록 라인은 호출에 디버그 lib 디렉토리 / active_record / log_subscriber.rb입니다.

    즉, 디버그 방법은 ActiveSupport에 의해 정의된다 :: LogSubscriber.

    그래서 우리는 지금처럼 덮어 쓰기하여 로깅을 노크 할 수 있습니다 :

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

    6.= config.log_level : 나는 이것을 사용 정보를 에서 편집 설정 / 환경 / performance.rb

    = config.log_level : 나는 이것을 사용 정보를 에서 편집 설정 / 환경 / performance.rb

    나를 위해 좋은 작업 SQL 출력을 거부 만 렌더링 및 중요한 정보를 표시합니다.

  7. ==============================

    7.레일 3.2에서 나는 설정 / 환경 / development.rb이 같은 일을 해요 :

    레일 3.2에서 나는 설정 / 환경 / development.rb이 같은 일을 해요 :

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

    8.그냥 참고로, 레일 2에서 당신이 할 수있는 등

    그냥 참고로, 레일 2에서 당신이 할 수있는 등

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

    당신이 원하는 경우에 분명히 중괄호는 DO 엔드 블록으로 대체 할 수있다.

  9. from https://stackoverflow.com/questions/7759321/disable-rails-sql-logging-in-console by cc-by-sa and MIT license