class_docstr: Base class for Journal storages.
  
  Storage classes implementing this base class must guarantee process safety. This means,
  multiple processes might concurrently call ``read_logs`` and ``append_logs``. If the
  backend storage does not internally support mutual exclusion mechanisms, such as locks,
  you might want to use :class:`~optuna.storages.JournalFileSymlinkLock` or
  :class:`~optuna.storages.JournalFileOpenLock` for creating a critical section.
class_docstr_tok: ["Base","class","for","Journal","storages",".","Storage","classes","implementing","this","base","class","must","guarantee","process","safety",".","This","means",",","multiple","processes","might","concurrently","call","``","read_logs","``","and","``","append_logs","``",".","If","the","backend","storage","does","not","internally","support","mutual","exclusion","mechanisms",",","such","as","locks",",","you","might","want","to","use",":","class",":","`","~optuna.storages.JournalFileSymlinkLock","`","or",":","class",":","`","~optuna.storages.JournalFileOpenLock","`","for","creating","a","critical","section","."]
docstr: Append logs to the backend.
  
  Args:
      logs:
          A list that contains json-serializable logs.
docstr_tok: ["Append","logs","to","the","backend",".","Args",":","logs",":","A","list","that","contains","json-serializable","logs","."]
code: def append_logs(self, logs: List[Dict[str, Any]]) -> None:
      """Append logs to the backend.
  
      Args:
          logs:
              A list that contains json-serializable logs.
      """
  
      raise NotImplementedError
  
file_path: optuna/optuna/storages/_journal/base.py
imports: import abc
  from typing import Any
  from typing import Dict
  from typing import List
  from typing import Optional
label_desc: Use image node_id 2 for calling the BaseJournalLogStorage obj's underlying member method code with example usage: obj.append_logs(logs) without return types