text: # ---------------------------------------------------------------------------------------------
  # Modified from Swin Transformer, please refer to https://github.com/microsoft/Swin-Transformer
  # ---------------------------------------------------------------------------------------------
  
  import os
  import sys
  import logging
  import functools
  from termcolor import colored
  
  
  @functools.lru_cache()
  def create_logger(output_dir, dist_rank=0, name=''):
      # create logger
      logger = logging.getLogger(name)
      logger.setLevel(logging.DEBUG)
      logger.propagate = False
  
      # create formatter
      fmt = '[%(asctime)s %(name)s] (%(filename)s %(lineno)d): %(levelname)s %(message)s'
      color_fmt = colored('[%(asctime)s %(name)s]', 'cyan') + \
                  colored('(%(filename)s %(lineno)d)', 'magenta') + ': %(levelname)s %(message)s'
  
      # create console handlers for master process
      if dist_rank == 0:
          console_handler = logging.StreamHandler(sys.stdout)
          console_handler.setLevel(logging.DEBUG)
          console_handler.setFormatter(
              logging.Formatter(fmt=color_fmt, datefmt='%Y-%m-%d %H:%M:%S'))
          logger.addHandler(console_handler)
  
      # create file handlers
      file_handler = logging.FileHandler(os.path.join(output_dir, f'log_rank{dist_rank}.txt'), mode='a')
      file_handler.setLevel(logging.DEBUG)
      file_handler.setFormatter(logging.Formatter(fmt=fmt, datefmt='%Y-%m-%d %H:%M:%S'))
      logger.addHandler(file_handler)
  
      return logger
  