API Gateway includes some request logging to Cloudwatch Logs, documentation is here. If you want to record more information I would personally collect it in lambda and push it out to an access log in a dedicated Cloudwatch Logs group. Just beware because the cost of bandwidth and storage to Cloudwatch Logs can add up for busy sites.

Otherwise regarding your options

  1. DynamoDB would be fast enough. A MySQL database would probably be fine for performance as well, probably adding less than a millisecond to processing time.
  2. Not really fully featured
  3. This would work fine, but I would only do it if #1 turned out to be too slow. It's not that complex to push a message to a queue then have another process consume it.