code: func NewLogFileV4EventReader(
  	src io.Reader,
  	srcName string,
  	parsers V4EventParserMap,
  	logger Logger) EventReader {
  
  	rawReader := NewRawV4EventReader(src, srcName)
  
  	return &logFileV4EventReader{
  		reader:                      NewParsedV4EventReader(rawReader, parsers),
  		parsers:                     parsers,
  		passedMagicBytesCheck:       false,
  		passedLogFormatVersionCheck: false,
  		logger: logger,
  	}
  }
docs: // This returns an EventReader which read events from a single (bin / relay)
  // log file, with appropriate parser applied on each event.  If no parser is
  // available for the event, or if an error occurs during parsing, then the
  // reader will return the original event along with the error.  NOTE: this
  // reader is responsible for checking the log file magic marker, the binlog
  // format version and all format description events within the stream.  It is
  // also responsible for setting the checksum size for non-FDE events.