コンソールでコマンドを実行しているときにSQLクエリロギングを無効にする方法はありますか?理想的には、コンソールでコマンドを使用して無効にしてから再度有効にできると便利です。
私は何かをデバッグしようとしていて、「put」を使用して関連データを印刷しています。ただし、SQLクエリの出力により読みにくくなっています。
編集:私のコード以外がlogger.warnを呼び出そうとした場合、ロガーをnilに設定するとエラーが発生することがあるため、別の解決策を見つけました
ロガーをnil
に設定する代わりに、ロガーのレベルを1
に設定できます。
ActiveRecord::Base.logger.level = 1 # or Logger::INFO
オフにするには:
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
オンに戻すには:
ActiveRecord::Base.logger = old_logger
これは、ARからの潜在的な他のログ記録を引き続き可能にする、いくらかクリーンなものと考えるバリエーションです。 config/environments/development.rb内:
config.after_initialize do
ActiveRecord::Base.logger = Rails.logger.clone
ActiveRecord::Base.logger.level = Logger::INFO
end
これはコンソールに適したソリューションではないかもしれませんが、Railsにはこの問題に対するメソッドがあります。 Logger#silence
ActiveRecord::Base.logger.silence do
# the stuff you want to be silenced
end
誰かが実際に SQLステートメントのロギングをノックアウトしたい場合(ロギングレベルを変更せずに、ARモデルからのロギングを維持しながら):
ログに書き込む行(Rails 3.2.16)は、lib/active_record/log_subscriber.rb:50
のdebug
の呼び出しです。
そのデバッグメソッドはActiveSupport::LogSubscriber
によって定義されます。
そのため、次のように上書きすることでロギングをノックアウトできます。
module ActiveSupport
class LogSubscriber
def debug(*args, &block)
end
end
end
Rails 4の場合、以下を環境ファイルに入れることができます。
# /config/environments/development.rb
config.active_record.logger = nil
私はこれを使用しました:config.log_level = :info
edit-in config/environments/performance.rb
私にとってはうまく機能し、SQL出力を拒否し、レンダリングと重要な情報のみを表示します。
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
参考までに、Rails 2では次のことができます
ActiveRecord::Base.silence { <code you don't want to log goes here> }
もちろん、必要に応じて、中括弧をdo end
ブロックに置き換えることができます。