Why do we need to:
1) advance through the bufferlist to decode it,
2) splice through the bufferlist to empty it (and move the LogEvent out)
3) calculate the length we advanced and spliced through?

Can't we just advance through once (copying the LogEvent into its bufferlist along the way), then look at how far we've moved the iterator and use that to trim the incoming bufferlist and return the size we've advanced?