2016-05-13 3 views
1

ログにはCREATE/UPDATE/DESTROY関連のSQL文だけが表示されます。 READに関連するステートメント、キャッシュ、またはその他の情報がログに表示されることは望ましくありません。Railsログ:ログにはSQLステートメントの作成、更新、および破棄のみが表示されます。

現在app/config/environments/production.rb以内に、私はログにあまりにも多くを示し、以下の構成を設定している:生産のための

config.log_level = :debug 

デフォルトの設定では少なすぎる情報が表示されます。私が見たい情報だけをログ出力を持っているために、レール内のコンフィギュレーション設定が

# shows too little information 
config.log_level = :info 

あります:それは私が見てみたいすべてのSQL文を無視しますか?そうでない場合はどうすればいいですか?

+0

は、これを読んで:http://guides.rubyonrails.org/debugging_rails_applications.html#log-levels – uday

+0

@uDaY感謝。私はこれを読んだ。現在私が探しているログレベルが存在しないように見えますが、カスタムログレベルの実装方法に関する多くのガイダンスはないようです。 – Neil

+1

ログレベルを ':info'に設定し、[' sql.active_record'](http://edgeguides.rubyonrails.org/active_support_instrumentation.html#sql-active-record)イベントを購読し、すべての手動イベントを'SELECT'で始まらないログ... – spickermann

答えて

1

log_level:infoに設定して、ActiveRecordデータベースクエリのログを無効にすることができます。

次に、Rails 'ActiveSupport::Instrumentationを使用し、sql.active_recordイベントに登録します。

だけ初期化子に次のコードを追加します。

# in `config/initializers/query_logger.rb` 
class QueryLogger 
    def call(name, started, finished, unique_id, payload) 
    query = payload[:sql] 

    Rails.logger.info("SQL Query: #{query}") unless query.start_with?('SELECT') 
    end 
end 

ActiveSupport::Notifications.subscribe('sql.active_record', QueryLogger.new) 
+0

すごい!ありがとう! – Neil

+0

これは素晴らしい動作します。私が望んだのは、SQL Queryステートメント内の値を表示することだけでした。この実装は現在、そうしていません。どのようにこの仕事をする上のヒントは素晴らしいだろう。この設定のSQL Logステートメントの例: 'Info - :SQL Query:UPDATE" blogs "SET" name "=?、" age "=?、" updated_at "=? where "blogs"。 "id" =? 'これは、' name'、 'age'、' updated_at''blogs.id'の値がどのように表示されないかに気づきます。それがあれば完璧だろう。 – Neil

+1

[docs](http://edgeguides.rubyonrails.org/active_support_instrumentation.html#sql-active-record)では、ペイロードは 'sql'だけでなく' name'、 'id 'と' binds'(バインディング ')です。私はそれをテストしなかったが、あなたが 'バインド 'でこの情報を見つけたら、私はあまりにも驚くだろう。その値を記録することもできます。 – spickermann

関連する問題