LoginSignup
5
3

More than 5 years have passed since last update.

Rails4.2でactive_record_storeの大量ログを表示しない方法

Posted at

セッションの保存にactive_record_storeを選択した時、コンソール上のログに大量のセッション情報が毎回出力されて困った事がある人向けの情報です。

rails s で開発サーバーを立ち上げた時、コンソールに以下のセッションログが大量に表示されて邪魔ですよね。

# ↓ このログが何十行にもなる
UPDATE "sessions" SET "data" = $1, "updated_at" = $2 WHERE "sessions"."id" = $3  [["data", "BAh7EE ... 以下略

activerecord-session_storeのコードを見ると logger.silence_logger で囲まれているのでERRORレベル以上じゃないとログが出ないコードに見えます。

activerecord-session_store/lib/action_dispatch/session/active_record_store.rb

def write_session(request, sid, session_data, options)
  logger.silence_logger do

ログのサイレンサーが有効になっていないのかな?と思ったのですが問題なく利用できる状態でした。

puts logger.silencer
true

development.logを見るとログのサイレンサーが有効になっているので、デフォルトのログ設定で標準出力でのみサイレンサーが有効にならないようです。

ちなみにログのサイレンサーはログレベルを一時的に入れ替えてログ出力を制御する仕組みです。

activesupport/lib/active_support/logger_silence.rb
  def silence(temporary_level = Logger::ERROR)
    if silencer
      begin
        old_logger_level, self.level = level, temporary_level
        yield self
      ensure
        self.level = old_logger_level
      end
    else
      yield self
    end
  end

問題のログはsessionsテーブルに保存されるときに出力されるログです。

そのためピンポイントでログレベルを切り替える方が logger.silence_logger で解決するよりも簡単そうだったので以下のパッチを準備しました。

initializersの下に silence_active_record_store_log.rb と付けておいてください。

development環境でのみRails.logger.levelを一時的に入れ替えています。

config/initializers/silence_active_record_store_log.rb
module ActionDispatch
  module Session
    class ActiveRecordStore

      if Rails.env.development?
        alias :_set_session :set_session
        def set_session(env, sid, session_data, options)
          level = Rails.logger.level
          Rails.logger.level = Logger::INFO
          _set_session(env, sid, session_data, options)
          ensure
          Rails.logger.level = level
        end
      end

    end
  end
end

Rails5では set_session が write_session に置き換わるようです。

質問などあればコメント欄にお願いします。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3