docs: def get_logger(name, log_level=logging.INFO, log_file=None, global_log_file=False, silence=False):
          """
          Build a logger. All logs will be propagated up to the root logger if not silenced. If log_file is provided, logs will be written out to that file. If global_log_file is true, log_file will be handed the root logger, otherwise it will only be used by this particular logger.
      
          Parameters
          ----------
          name :obj:`str`
              The name of the logger to be built.
          log_level : `int`
              The log level. See the python logging module documentation for possible enum values.
          log_file :obj:`str`
              The path to the log file to log to.
          global_log_file :obj:`bool`
              Whether or not to use the given log_file for this particular logger or for the root logger.
          silence :obj:`bool`
              Whether or not to silence this logger. If it is silenced, the only way to get output from this logger is through a non-global log file.
  
          Returns
          -------
          :obj:`logging.Logger`
              A custom logger.
          """
          no_op = False
          # some checks for silencing/no-op logging
          if silence and global_log_file:
              raise ValueError("You can't silence a logger and log to a global log file!")
          if silence and log_file is None:
              logging.warning('You are creating a no-op logger!')
              no_op = True
  
          # configure the root logger if it hasn't been already
          if not Logger.ROOT_CONFIGURED:
              configure_root()
          Logger.ROOT_CONFIGURED = True
          
          # build a logger
          logger = logging.getLogger(name)
          logger.setLevel(log_level)
  
          # silence the logger by preventing it from propagating upwards to the root
          logger.propagate = not silence
  
          # configure the log file stream 
          if log_file is not None:
              # if the log file is global, add it to the root logger
              if global_log_file:
                  add_root_log_file(log_file)
              # otherwise add it to this particular logger
              else:
                  hdlr = logging.FileHandler(log_file)
                  formatter = logging.Formatter('%(asctime)s %(name)-10s %(levelname)-8s %(message)s', datefmt='%m-%d %H:%M:%S')
                  hdlr.setFormatter(formatter)
                  logger.addHandler(hdlr)
  
          # add a no-op handler to suppress warnings about there being no handlers
          if no_op:
              logger.addHandler(logging.NullHandler())
          return logger