class_docstr: This is a queue based run data processor that queues incoming batches and processes them using
  single worker thread.
docstr: Sets up the logging thread.
  
  If the logging thread is already set up, this method does nothing.
docstr_tok: ["Sets","up","the","logging","thread",".","If","the","logging","thread","is","already","set","up",",","this","method","does","nothing","."]
code: def _set_up_logging_thread(self) -> None:
      """Sets up the logging thread.
  
      If the logging thread is already set up, this method does nothing.
      """
      with self._lock:
          self._batch_logging_thread = threading.Thread(
              target=self._logging_loop,
              name="MLflowAsyncLoggingLoop",
              daemon=True,
          )
  
          self._batch_status_check_threadpool = ThreadPoolExecutor(
              max_workers=10,
              thread_name_prefix="MLflowAsyncLoggingStatusCheck",
          )
          self._batch_logging_thread.start()
  
imports: import atexit
  import logging
  import threading
  from concurrent.futures import ThreadPoolExecutor
  from queue import Empty, Queue
  from mlflow.entities.metric import Metric
  from mlflow.entities.param import Param
  from mlflow.entities.run_tag import RunTag
  from mlflow.utils.async_logging.run_batch import RunBatch
  from mlflow.utils.async_logging.run_operations import RunOperations
label_desc: Use image node_id 11 for calling the AsyncLoggingQueue obj's underlying member method code with example usage: obj._set_up_logging_thread() without return types