docstr: 将日志输出到 path 中。
  
  :param path: 若 path 为文件路径（通过 path 是否包含后缀判定 path 是否表示文件名，例如 output.log 会被认为是文件，而
          output 则认为是文件夹）则直接写入到给定文件中；如果判定为文件夹，则是在该文件夹下以 时间戳 创建一个日志文件。
  :param level: 可选 ['INFO', 'WARNING', 'DEBUG', 'ERROR', 'AUTO'], 其中AUTO表示根据环境变量"FASTNLP_LOG_LEVEL'进行
      设置。
  :param remove_other_handlers: 是否移除其它 handler ，如果移除，则terminal中将不会有 log 输出。
  :param mode: 可选为['w', 'a']，如果传入的 path 是存在的文件，'w' 会覆盖原有内容 'a' 则会在文件结尾处继续添加。
  :return:
code: def add_file(
      self,
      path: Optional[Union[str, Path]] = None,
      level="AUTO",
      remove_other_handlers: bool = False,
      mode: str = "w",
  ):
      """
      将日志输出到 path 中。
  
      :param path: 若 path 为文件路径（通过 path 是否包含后缀判定 path 是否表示文件名，例如 output.log 会被认为是文件，而
              output 则认为是文件夹）则直接写入到给定文件中；如果判定为文件夹，则是在该文件夹下以 时间戳 创建一个日志文件。
      :param level: 可选 ['INFO', 'WARNING', 'DEBUG', 'ERROR', 'AUTO'], 其中AUTO表示根据环境变量"FASTNLP_LOG_LEVEL'进行
          设置。
      :param remove_other_handlers: 是否移除其它 handler ，如果移除，则terminal中将不会有 log 输出。
      :param mode: 可选为['w', 'a']，如果传入的 path 是存在的文件，'w' 会覆盖原有内容 'a' 则会在文件结尾处继续添加。
      :return:
      """
      r"""添加日志输出文件和输出级别"""
      if level == "AUTO":
          level = parse_level()
      return _add_file_handler(
          self, path, level, remove_other_handlers, mode
      )
  
imports: import logging
  import logging.config
  from logging import DEBUG, ERROR, INFO, WARNING, CRITICAL, raiseExceptions
  import os
  import sys
  import warnings
  from pathlib import Path
  from typing import Optional, Union
  from rich.logging import RichHandler
  from fastNLP.core.log.handler import StdoutStreamHandler, TqdmLoggingHandler
  from fastNLP.envs.env import FASTNLP_LOG_LEVEL, FASTNLP_GLOBAL_RANK, FASTNLP_LAUNCH_TIME, FASTNLP_BACKEND_LAUNCH
  from fastNLP.envs.distributed import is_cur_env_distributed
label_desc: Use image node_id 2 for calling the FastNLPLogger obj's underlying member method code with example usage: obj.add_file(path, level, remove_other_handlers, mode) and returns: _add_file_handler