code: def setup(level: Union[str, int], structured: bool, config_path: str = None):
      
      global logs_are_structured
      logs_are_structured = structured
  
      if not isinstance(level, int):
          level = logging._nameToLevel[level]
  
      def ensure_utf8_stream(stream):
          if not isinstance(stream, io.StringIO) and hasattr(stream, "buffer"):
              stream = codecs.getwriter("utf-8")(stream.buffer)
              stream.encoding = "utf-8"
          return stream
  
      sys.stdout, sys.stderr = (ensure_utf8_stream(s)
                                for s in (sys.stdout, sys.stderr))
  
      # basicConfig is only called to make sure there is at least one handler for the root logger.
      # All the output level setting is down right afterwards.
      logging.basicConfig()
      logging.setLogRecordFactory(NumpyLogRecord)
      if config_path is not None and os.path.isfile(config_path):
          with open(config_path) as fh:
              config = yaml.safe_load(fh)
          for key, val in config.items():
              logging.getLogger(key).setLevel(logging._nameToLevel.get(val, level))
      root = logging.getLogger()
      root.setLevel(level)
  
      if not structured:
          if not sys.stdin.closed and sys.stdout.isatty():
              handler = root.handlers[0]
              handler.setFormatter(AwesomeFormatter())
      else:
          root.handlers[0] = StructuredHandler(level)
docs: Make stdout and stderr unicode friendly in case of misconfigured \
      environments, initializes the logging, structured logging and \
      enables colored logs if it is appropriate.
  
      :param level: The global logging level.
      :param structured: Output JSON logs to stdout.
      :param config_path: Path to a yaml file that configures the level of output of the loggers. \
                          Root logger level is set through the level argument and will override any \
                          root configuration found in the conf file.
      :return: None