docs: private void rewindToMessageRecord() throws IOException {
  		for(LogRecordSerializer current: formatter==null ?
  				LogRepositoryBrowserImpl.KNOWN_FORMATTERS :
  					new LogRecordSerializer[]{formatter}) {
  			long position = 0L;
  			long fileSize = reader.length();
  			while (position + 8 < fileSize) {
  				try {
  					// Need to seek on each iteration since reading corrupt record
  					// may cause skip over good records.
  					reader.seek(position);
  					position = seekToNextRecord(current);
  					int recSize = reader.readLength();
  					// check that recSize is sensible.
  					if (recSize > 0 && position + recSize + 8 < fileSize) {
  						DataInputStream input = readRecord(recSize);
  						int tailSize =  reader.readLength();
  						if (LogRecordSerializer.RECORD == current.getType(input)) {
  							formatter = current;
  							reader.seek(position);
  							if (recSize != tailSize) {
  								logger.logp(Level.WARNING, className, "rewindToMessageRecord", "HPEL_InconsistencyInLogRecordSize",
  										new Object[]{Integer.toString(tailSize), Long.toString(position), Integer.toString(recSize), file.getAbsolutePath()});
  							}
  							return;
  						}
  					}
  				} catch (DeserializerException ex3) {
  					// This means we are still in corrupted area.
  				} catch (EOFException ex3) {
  					// This means record is too small even for getType()
  				} catch (IOException ex3) {
  					// No records according to the current formatter.
  					break;
  				}
  				// The shift of 5 bytes from the previously found record location consists
  				// of 4 bytes of the record length plus one byte to avoid finding the same
  				// eye catcher again.
  				position += 5;
  			}
  		}
  		throw new IOException("No formatter can find a message record.");
  	}