class_docstr: FileProcessorHandler is a python log handler that handles dag processor logs.
  
  It creates and delegates log handling to `logging.FileHandler`
  after receiving dag processor context.
  
  :param base_log_folder: Base log folder to place logs.
  :param filename_template: template filename string
class_docstr_tok: ["FileProcessorHandler","is","a","python","log","handler","that","handles","dag","processor","logs",".","It","creates","and","delegates","log","handling","to","`","logging.FileHandler","`","after","receiving","dag","processor","context",".",":","param","base_log_folder",":","Base","log","folder","to","place","logs",".",":","param","filename_template",":","template","filename","string"]
docstr: Create symbolic link to the current day's log directory.
  
  Allows easy access to the latest scheduler log files.
  
  :return: None
docstr_tok: ["Create","symbolic","link","to","the","current","day","'s","log","directory",".","Allows","easy","access","to","the","latest","scheduler","log","files",".",":","return",":","None"]
code: def _symlink_latest_log_directory(self):
      """
      Create symbolic link to the current day's log directory.
  
      Allows easy access to the latest scheduler log files.
  
      :return: None
      """
      log_directory = self._get_log_directory()
      latest_log_directory_path = os.path.join(
          self.base_log_folder, "latest"
      )
      if os.path.isdir(log_directory):
          rel_link_target = Path(log_directory).relative_to(
              Path(latest_log_directory_path).parent
          )
          try:
              # if symlink exists but is stale, update it
              if os.path.islink(latest_log_directory_path):
                  if (
                      os.path.realpath(latest_log_directory_path)
                      != log_directory
                  ):
                      os.unlink(latest_log_directory_path)
                      os.symlink(
                          rel_link_target, latest_log_directory_path
                      )
              elif os.path.isdir(
                  latest_log_directory_path
              ) or os.path.isfile(latest_log_directory_path):
                  logging.warning(
                      "%s already exists as a dir/file. Skip creating symlink.",
                      latest_log_directory_path,
                  )
              else:
                  os.symlink(rel_link_target, latest_log_directory_path)
          except OSError:
              logging.warning(
                  "OSError while attempting to symlink the latest log directory"
              )
  
file_path: airflow/airflow/utils/log/file_processor_handler.py
imports: from __future__ import annotations
  import logging
  import os
  from datetime import datetime
  from pathlib import Path
  from airflow import settings
  from airflow.utils.helpers import parse_template_string
  from airflow.utils.log.logging_mixin import DISABLE_PROPOGATE
  from airflow.utils.log.non_caching_file_handler import NonCachingFileHandler
label_desc: Use image node_id 8 for calling the FileProcessorHandler obj's underlying member method code with example usage: obj._symlink_latest_log_directory() without return types