class_docstr: Abstract file logger.
  
  Args:
          path (str): path to write logs to
          steps_before_flushing: (int): Number of steps to store in log before flushing
          log_all_ranks: (bool): Log all ranks if true, else log only on rank 0.
class_docstr_tok: ["Abstract","file","logger",".","Args",":","path","(","str",")",":","path","to","write","logs","to","steps_before_flushing",":","(","int",")",":","Number","of","steps","to","store","in","log","before","flushing","log_all_ranks",":","(","bool",")",":","Log","all","ranks","if","true",",","else","log","only","on","rank","0","."]
docstr: Add multiple scalar values.
  
  Args:
      payload (dict): dictionary of tag name and scalar value
      step (int): step value to record
docstr_tok: ["Add","multiple","scalar","values",".","Args",":","payload","(","dict",")",":","dictionary","of","tag","name","and","scalar","value","step","(","int",")",":","step","value","to","record"]
code: def log_dict(self, payload: Mapping[str, Scalar], step: int) -> None:
      """Add multiple scalar values.
  
      Args:
          payload (dict): dictionary of tag name and scalar value
          step (int): step value to record
      """
  
      for k, v in payload.items():
          self.log(k, v, step)
  
file_path: tnt/torchtnt/utils/loggers/file.py
imports: import atexit
  import logging
  from abc import ABC, abstractmethod
  from collections import OrderedDict
  from time import monotonic
  from typing import Dict, Mapping
  from torchtnt.utils.distributed import get_global_rank
  from torchtnt.utils.loggers.logger import Scalar
  from torchtnt.utils.loggers.utils import scalar_to_float
label_desc: Use image node_id 3 for calling the FileLogger obj's underlying member method code with example usage: obj.log_dict(payload, step) without return types