docs: def read_log(self, logfile):
          """The read_log method returns a memory efficient generator for rows in a Bro log.
  
          Usage: 
              rows = my_bro_reader.read_log(logfile)
              for row in rows:
                  do something with row
  
          Args:
              logfile: The Bro Log file.
          """
  
          # Make sure we're at the beginning
          logfile.seek(0)
  
          # First parse the header of the bro log
          field_names, _ = self._parse_bro_header(logfile)
  
          # Note: SO stupid to write a csv reader, but csv.DictReader on Bro
          #       files was doing something weird with generator output that
          #       affected zeroRPC and gave 'could not route _zpc_more' error.
          #       So wrote my own, put a sleep at the end, seems to fix it.
          while 1:
              _line = next(logfile).strip()
              if not _line.startswith('#close'):
                  yield self._cast_dict(dict(zip(field_names, _line.split(self.delimiter))))
              else:
                  time.sleep(.1) # Give time for zeroRPC to finish messages
                  break