0

この投稿のフォローアップとして: 生成されているすべてのクエリをログに記録しようとしています。これをイニシャライザに配置しようとしましたが、コンソールで実行して実行しても実行されないようです。

私は次のことを試しました:

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
    raise "THROW AN ERROR"
    begin
        file = File.open(RAILS_ROOT + "/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

そして、実行します

Person.last

そして、私はまだエラーが発生しません。

4

1 に答える 1

0

ロギングを取得するために ActiveRecord にモンキー パッチを適用する必要はありません (とにかく、ここでは間違っています)。開発中はすべてのクエリがすでにログに記録されているため、本番環境でこれが必要だと思います。これを次のように設定するだけですconfig/environments/production.rb:

config.log_level = :debug

または、これをSQLクエリのみに制限したい場合は、他の冗長性なしで、これを試してください:

ActiveRecord::Base.logger.level = Logger::DEBUG

または、SQL クエリを専用のログファイルに書き込むことが目的の場合は、次の質問を確認してください: Rails3 SQL logging output in separate file

于 2012-11-07T18:06:20.353 に答える