복붙노트

[SQL] 레일의 데이터베이스에 모든 SQL 쿼리 로그

SQL

레일의 데이터베이스에 모든 SQL 쿼리 로그

I합니다 (, UPDATE 및 DELETE을 만들 즉), 일부 SQL 쿼리를 수행 레일 로그 파일에 저장하려면 그러므로 나는 모든 쿼리를 차단하고 일부 정규 표현식와 아마를 필터링하고 필요에 따라 로그인해야합니다.

(가) 코드를 레일에 어디에서 그런 일을 넣을까요?

해결법

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

    1.SQL은 레일 로그인 - 간단히 - 당신은 액티브 메소드를 실행 오버라이드 (override) 할 필요가있다. 당신은 로깅을 위해 어떤 논리를가 추가 할 수 있습니다.

    SQL은 레일 로그인 - 간단히 - 당신은 액티브 메소드를 실행 오버라이드 (override) 할 필요가있다. 당신은 로깅을 위해 어떤 논리를가 추가 할 수 있습니다.

  2. ==============================

    2.여기에 링크 c0r0ner 무엇의 단순화 된 버전은 더 나은를 표시합니다 :

    여기에 링크 c0r0ner 무엇의 단순화 된 버전은 더 나은를 표시합니다 :

    connection = ActiveRecord::Base.connection
    class << connection
      alias :original_exec :execute
      def execute(sql, *name)
        # try to log sql command but ignore any errors that occur in this block
        # we log before executing, in case the execution raises an error
        begin
            File.open(Rails.root.join("/log/sql.txt"),'a'){|f| f.puts Time.now.to_s+": "+sql}
        rescue Exception => e
          ;
        end
        # execute original statement
        original_exec(sql, *name)
      end
    end
    
  3. ==============================

    3.추종자를위한 참고로, 당신은 레일과 같은 "모든 쿼리를 기록 할"수 - 로그 파일에 생성 된 SQL 쿼리를 참조하고 필요한 경우 당신이 원하는 사람을위한 파일을 grep을.

    추종자를위한 참고로, 당신은 레일과 같은 "모든 쿼리를 기록 할"수 - 로그 파일에 생성 된 SQL 쿼리를 참조하고 필요한 경우 당신이 원하는 사람을위한 파일을 grep을.

  4. ==============================

    4.당신이 MySQL을 사용하는 경우 나는 mysqlbinlog은에 보일 것이다. 잠재적으로 데이터를 업데이트하는 것이 모든 것을 추적 할 것입니다. 당신은 쉽게 해당 로그에서 필요한 당신이 무엇을 밖으로 grep을 할 수 있습니다.

    당신이 MySQL을 사용하는 경우 나는 mysqlbinlog은에 보일 것이다. 잠재적으로 데이터를 업데이트하는 것이 모든 것을 추적 할 것입니다. 당신은 쉽게 해당 로그에서 필요한 당신이 무엇을 밖으로 grep을 할 수 있습니다.

    http://dev.mysql.com/doc/refman/5.0/en/mysqlbinlog.html

    http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

  5. ==============================

    5.SQL 서버? 그렇다면...

    SQL 서버? 그렇다면...

    사실, 나는 SQL의 끝에서이 작업을 수행 할 것입니다. 당신은 추적을 설정하고, 특정 응용 프로그램 이름과의 연결을 통해 나오는 모든 쿼리를 수집 할 수 있습니다. 당신이 테이블에 저장하는 경우, 당신은 쉽게 쿼리 해당 테이블 나중에 할 수 있습니다.

  6. ==============================

    6.적어도 레일 4 @의 루카의 대답의 약간 업데이트 된 버전은 (아마도 5 레일)

    적어도 레일 4 @의 루카의 대답의 약간 업데이트 된 버전은 (아마도 5 레일)

    이에 설정 / 초기화 / sql_logger.rb 장소 :

    connection = ActiveRecord::Base.connection
    class << connection
      alias :original_exec :execute
      def execute(sql, *name)
        # try to log sql command but ignore any errors that occur in this block
        # we log before executing, in case the execution raises an error
        begin
          File.open(Rails.root.join("log/sql.log"), 'a') do |file|
            file.puts Time.now.to_s + ": " + sql
          end
        rescue Exception => e
          "Error logging SQL: #{e}"
        end
        # execute original statement
        original_exec(sql, *name)
      end
    end
    
  7. from https://stackoverflow.com/questions/1629351/log-every-sql-query-to-database-in-rails by cc-by-sa and MIT license