docstr: create a logger
  
  Args:
      name (str): name of the logger
      level: level of logger
  
  Raises:
      ValueError is name is None
code: def create_logger(name=None, level=logging.INFO):
      """create a logger
  
      Args:
          name (str): name of the logger
          level: level of logger
  
      Raises:
          ValueError is name is None
      """
  
      if name is None:
          raise ValueError("name for logger cannot be None")
  
      formatter = logging.Formatter(
          "[%(asctime)s] [%(levelname)s] "
          "[%(filename)s:%(lineno)d:%(funcName)s] %(message)s"
      )
  
      logger_ = logging.getLogger(name)
      logger_.setLevel(level)
      logger_.propagate = False
      ch = logging.StreamHandler(stream=sys.stdout)
      ch.setLevel(level)
      ch.setFormatter(formatter)
      logger_.addHandler(ch)
      return logger_
  
file_path: deepspeed/deepspeed/utils/logging.py
imports: import functools
  import logging
  import sys
  import os
label_desc: Use image node_id 1 for calling the LoggerFactory obj's underlying member method code with example usage: obj.create_logger(name, level) and returns: logger_