docs: def getCustomLogger(name, logLevel, logFormat='%(asctime)s %(levelname)-9s:%(name)s:%(module)s:%(funcName)s: %(message)s'):
    '''
    Set up logging
  
    :param str name: What log level to set
    :param str logLevel: What log level to use
    :param str logFormat: Format string for logging
    :rtype: logger
    '''
    assert isinstance(logFormat, basestring), ("logFormat must be a string but is %r" % logFormat)
    assert isinstance(logLevel, basestring), ("logLevel must be a string but is %r" % logLevel)
    assert isinstance(name, basestring), ("name must be a string but is %r" % name)
  
    validLogLevels = ['CRITICAL', 'DEBUG', 'ERROR', 'INFO', 'WARNING']
  
    if not logLevel:
      logLevel = 'DEBUG'
  
    # If they don't specify a valid log level, err on the side of verbosity
    if logLevel.upper() not in validLogLevels:
      logLevel = 'DEBUG'
  
    numericLevel = getattr(logging, logLevel.upper(), None)
    if not isinstance(numericLevel, int):
      raise ValueError("Invalid log level: %s" % logLevel)
  
    logging.basicConfig(level=numericLevel, format=logFormat)
    logger = logging.getLogger(name)
    return logger