Railsログにログイン中のユーザIDを表示させたい

前提

Ruby on Rails(v5.2.5)でWebアプリケーションを開発・運用しています。
ログインの仕組みはdevise gemを利用し、
userモデル(団体会員)とpersonモデル(個人会員)をそれぞれログインユーザ方法を保持するモデルとして定義しています。
session情報の保存(session_store)にはRedis(ElastiCache for Redis)を使っています。
(Redisはキャッシュの保存やsidekiqのキューとしても利用しています)

実現したいこと

Railsログ(production.log)にログイン中のユーザのIDも表示させたいです。
現在、以下のようにリクエストIDなどは表示している状態です。
ログイン中のユーザが存在する場合はここに追加したいです。

I, [2022-07-12T07:37:12.020791 #1] INFO -- : [i5ab0ff7-9a01-9995-hf9a-i51fduu107p0] Rendered articles/show.html.erb within layouts/application (4574.8ms)
  • config/environments/production.rb の状態(抜粋)
config.logger.formatter = ::Logger::Formatter.new config.log_tags = [ :request_id ]

発生している問題・エラーメッセージ

ネット検索で見当たった以下の方法を試してみましたが、
それぞれ上手くいかない状態です、、

1. Rails.application.config.session_options を使用(参考サイト)
⇛結果:何も出力されない

ruby

config.log_tags = [ :request_id, ->(req) { session_key = (Rails.application.config.session_options || {})[:key] session_data = req.cookie_jar.encrypted[session_key] || {} users = [] %w(user person).each do |scope| user_id = session_data.dig("warden.user.#{scope}.key", 0, 0) users << "#{scope}:#{user_id}" if user_id end users.join(',') } ]

pry-byebugで途中で止めてそれぞれの変数の中身を確認したところ、
session_key にはRedisのサーバ情報しか格納されておらず、 session_data には何も格納されていなかったため、
ログイン中のユーザで操作を行っても、戻り値はnilになる状態でした。

2.セッションストアからセッション情報を抽出する方法(参考サイト)
⇛結果:何も出力されない

config.log_tags = [ :request_id, ->(req) { Redis.current = Redis.new(host: Settings.redis.host, port: "6379") Redis.current.keys('session:*').select {|key| user_hash = Marshal.load(Redis.current.get(key)) } } ]

※そもそも、 Redis.current.keys('session:*') は大量に存在するため、どれが今のセッションか特定できない。
今のセッションがどれなのか特定する方法が不明

試したこと

「発生している問題・エラーメッセージ」に記載した通りとなります。

補足情報(FW/ツールのバージョンなど)

ruby 2.6.6
Rails 5.2.5

お手数をお掛けしますが、何か「これっぽいのでは?」という情報だけでも示唆いただけると大変ありがたいです。
また、不足情報等ございましたら、恐れ入りますがご指摘いただけますと幸いです。
どうぞよろしくお願いいたします。

コメントを投稿

0 コメント