code: def _make_range_request(self):
      try:
          # Yes we read to the end... memory blow up is possible. We can improve by specifying length param
          return self._blob_client.download_blob(
              offset=self._pos
          ).readall()
      except ResourceNotFoundError:
          # Maybe the log hasn't been uploaded yet, but will be soon.
          return None
      except HttpResponseError as e:
          # be silent on range errors - it means log did not advance
          if e.status_code != 416:
              print(
                  "Failed to tail log from step (status code = %d)"
                  % (e.status_code,)
              )
          return None
      except Exception as e:
          print("Failed to tail log from step (%s)" % type(e))
          return None
  
file_path: metaflow/metaflow/plugins/azure/azure_tail.py
imports: from io import BytesIO
  from azure.core.exceptions import ResourceNotFoundError, HttpResponseError
  from metaflow.exception import MetaflowException
  from metaflow.plugins.azure.blob_service_client_factory import get_azure_blob_service_client
  from metaflow.plugins.azure.azure_utils import parse_azure_full_path
label_desc: Use image node_id 3 for calling the AzureTail obj's underlying member method code with example usage: obj._make_range_request() and returns: self, None, None, None