web-dev-qa-db-ja.com

コンソールでRails SQLロギングを無効にします

コンソールでコマンドを実行しているときにSQLクエリロギングを無効にする方法はありますか?理想的には、コンソールでコマンドを使用して無効にしてから再度有効にできると便利です。

私は何かをデバッグしようとしていて、「put」を使用して関連データを印刷しています。ただし、SQLクエリの出力により読みにくくなっています。


編集:私のコード以外がlogger.warnを呼び出そうとした場合、ロガーをnilに設定するとエラーが発生することがあるため、別の解決策を見つけました

ロガーをnilに設定する代わりに、ロガーのレベルを1に設定できます。

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

オフにするには:

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

オンに戻すには:

ActiveRecord::Base.logger = old_logger
271
Ryan Bigg

これは、ARからの潜在的な他のログ記録を引き続き可能にする、いくらかクリーンなものと考えるバリエーションです。 config/environments/development.rb内:

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

これはコンソールに適したソリューションではないかもしれませんが、Railsにはこの問題に対するメソッドがあります。 Logger#silence

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

誰かが実際に SQLステートメントのロギングをノックアウトしたい場合(ロギングレベルを変更せずに、ARモデルからのロギングを維持しながら):

ログに書き込む行(Rails 3.2.16)は、lib/active_record/log_subscriber.rb:50debugの呼び出しです。

そのデバッグメソッドはActiveSupport::LogSubscriberによって定義されます。

そのため、次のように上書きすることでロギングをノックアウトできます。

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end
12
fakeleft

Rails 4の場合、以下を環境ファイルに入れることができます。

# /config/environments/development.rb

config.active_record.logger = nil
11
Micah

私はこれを使用しました:config.log_level = :info edit-in config/environments/performance.rb

私にとってはうまく機能し、SQL出力を拒否し、レンダリングと重要な情報のみを表示します。

7
Nate Ben

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
4
Telmo Costa

参考までに、Rails 2では次のことができます

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

もちろん、必要に応じて、中括弧をdo endブロックに置き換えることができます。

0
Max Williams