How to log user_name in Rails?

后端 未结 12 1677
遇见更好的自我
遇见更好的自我 2020-12-15 06:52

I use Devise in Rails 3. I want to see name of current_user in production.log.

I would like to configure rails like this:

config.log_tags = [:user_na         


        
12条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-15 07:48

    I used this solution from Wojtek Kruszewski: https://gist.github.com/WojtekKruszewski

    I tweaked a little bit for my project to only include id, but basically the same.

    # config/application.rb
    
    config.log_tags = [
      ->(req){
        if user_id = WardenTaggedLogger.extract_user_id_from_request(req)
          user_id.to_s
        else
          "?"
        end
      }
    ]
    

    And create this initializer

    # initializers/warden_tagged_logger.rb
    
    module WardenTaggedLogger
      def self.extract_user_id_from_request(req)
        session_key = Rails.application.config.session_options[:key]
        session_data = req.cookie_jar.encrypted[session_key]
        warden_data = session_data["warden.user.user.key"]
        warden_data[0][0]
        rescue
          nil
      end
    end
    

提交回复
热议问题