class_docstr: Base class to perform model training.
  
  Args:
      model (BaseAE): A instance of :class:`~pythae.models.BaseAE` to train
  
      train_dataset (BaseDataset): The training dataset of type
          :class:`~pythae.data.dataset.BaseDataset`
  
      eval_dataset (BaseDataset): The evaluation dataset of type
          :class:`~pythae.data.dataset.BaseDataset`
  
      training_config (BaseTrainerConfig): The training arguments summarizing the main
          parameters used for training. If None, a basic training instance of
          :class:`BaseTrainerConfig` is used. Default: None.
  
      callbacks (List[~pythae.trainers.training_callbacks.TrainingCallbacks]):
          A list of callbacks to use during training.
code: def _get_file_logger(self, log_output_dir):
      log_dir = log_output_dir
  
      # if dir does not exist create it
      if not os.path.exists(log_dir) and self.is_main_process:
          os.makedirs(log_dir, exist_ok=True)
          logger.info(f"Created {log_dir} folder since did not exists.")
          logger.info("Training logs will be recodered here.\n")
          logger.info(" -> Training can be monitored here.\n")
  
      # create and set logger
      log_name = f"training_logs_{self._training_signature}"
  
      file_logger = logging.getLogger(log_name)
      file_logger.setLevel(logging.INFO)
      f_handler = logging.FileHandler(
          os.path.join(
              log_dir, f"training_logs_{self._training_signature}.log"
          )
      )
      f_handler.setLevel(logging.INFO)
      file_logger.addHandler(f_handler)
  
      # Do not output logs in the console
      file_logger.propagate = False
  
      return file_logger
  
imports: import contextlib
  import datetime
  import logging
  import os
  from copy import deepcopy
  from typing import Any, Dict, List, Optional, Union
  import torch
  import torch.distributed
  import torch.optim
  import torch.optim.lr_scheduler
  from torch.nn.parallel import DistributedDataParallel
  from torch.utils.data import DataLoader, Dataset
  from torch.utils.data.distributed import DistributedSampler
  from ...customexception import ModelError
  from ...data.datasets import BaseDataset, collate_dataset_output
  from ...models import BaseAE
  from ..trainer_utils import set_seed
  from ..training_callbacks import CallbackHandler, MetricConsolePrinterCallback, ProgressBarCallback, TrainingCallback
  from .base_training_config import BaseTrainerConfig
label_desc: Use image node_id 9 for calling the BaseTrainer obj's underlying member method code with example usage: obj._get_file_logger(log_output_dir) and returns: file_logger