code: def verbose(f):
      
  
      @click.pass_context
      def new_func(ctx, *args, **kwargs):
          global log
          verbosity = ["critical", "error", "warn", "info", "debug"][
              int(min(ctx.obj.get("verbose", 0), 4))
          ]
          log.setLevel(getattr(logging, verbosity.upper()))
          formatter = logging.Formatter(
              "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
          )
          ch = logging.StreamHandler()
          ch.setLevel(getattr(logging, verbosity.upper()))
          ch.setFormatter(formatter)
          log.addHandler(ch)
  
          # GrapheneAPI logging
          if ctx.obj.get("verbose", 0) > 4:
              verbosity = ["critical", "error", "warn", "info", "debug"][
                  int(min(ctx.obj.get("verbose", 4) - 4, 4))
              ]
              log = logging.getLogger("grapheneapi")
              log.setLevel(getattr(logging, verbosity.upper()))
              log.addHandler(ch)
  
          if ctx.obj.get("verbose", 0) > 8:
              verbosity = ["critical", "error", "warn", "info", "debug"][
                  int(min(ctx.obj.get("verbose", 8) - 8, 4))
              ]
              log = logging.getLogger("graphenebase")
              log.setLevel(getattr(logging, verbosity.upper()))
              log.addHandler(ch)
  
          return ctx.invoke(f, *args, **kwargs)
  
      return update_wrapper(new_func, f)
docs: Add verbose flags and add logging handlers