class_docstr: File storage class for Journal log backend.
  
  Args:
      file_path:
          Path of file to persist the log to.
  
      lock_obj:
          Lock object for process exclusivity.
class_docstr_tok: ["File","storage","class","for","Journal","log","backend",".","Args",":","file_path",":","Path","of","file","to","persist","the","log","to",".","lock_obj",":","Lock","object","for","process","exclusivity","."]
code: def read_logs(self, log_number_from: int) -> List[Dict[str, Any]]:
      logs = []
      with open(self._file_path, "rb") as f:
          log_number_start = 0
          if log_number_from in self._log_number_offset:
              f.seek(self._log_number_offset[log_number_from])
              log_number_start = log_number_from
  
          last_decode_error = None
          for log_number, line in enumerate(f, start=log_number_start):
              if last_decode_error is not None:
                  raise last_decode_error
              if log_number + 1 not in self._log_number_offset:
                  byte_len = len(line)
                  self._log_number_offset[log_number + 1] = (
                      self._log_number_offset[log_number] + byte_len
                  )
              if log_number < log_number_from:
                  continue
              try:
                  logs.append(json.loads(line))
              except json.JSONDecodeError as err:
                  last_decode_error = err
                  del self._log_number_offset[log_number + 1]
  
          return logs
  
imports: import abc
  from contextlib import contextmanager
  import errno
  import json
  import os
  import time
  from typing import Any
  from typing import Dict
  from typing import Iterator
  from typing import List
  from typing import Optional
  import uuid
  from optuna.storages._journal.base import BaseJournalLogStorage
label_desc: Use image node_id 2 for calling the JournalFileStorage obj's underlying member method code with example usage: obj.read_logs(log_number_from) and returns: logs