class Redis::Client

def logging(commands)

def logging(commands)
  return yield unless @logger&.debug?
  begin
    commands.each do |name, *args|
      logged_args = args.map do |a|
        if a.respond_to?(:inspect) then a.inspect
        elsif a.respond_to?(:to_s) then a.to_s
        else
          # handle poorly-behaved descendants of BasicObject
          klass = a.instance_exec { (class << self; self end).superclass }
          "\#<#{klass}:#{a.__id__}>"
        end
      end
      @logger.debug("[Redis] command=#{name.to_s.upcase} args=#{logged_args.join(' ')}")
    end
    t1 = Time.now
    yield
  ensure
    @logger.debug("[Redis] call_time=%0.2f ms" % ((Time.now - t1) * 1000)) if t1
  end
end