The first long integer of the file represents the offset of the last written checkpoint, or -1 if there are no checkpoints
All additional data in the log consists of log records. Log records are variable length.
Each log record begins with an integer type and a long integer transaction id.
Each log record ends with a long integer file offset representing the position in the log file where the record began.
There are five record types: ABORT, COMMIT, UPDATE, BEGIN, and CHECKPOINT
ABORT, COMMIT, and BEGIN records contain no additional data
UPDATE RECORDS consist of two entries, a before image and an after image. These images are serialized Page objects, and can be accessed with the LogFile.readPageData() and LogFile.writePageData() methods. See LogFile.print() for an example.
CHECKPOINT records consist of active transactions at the time the checkpoint was taken and their first log record on disk. The format of the record is an integer count of the number of transactions, as well as a long integer transaction id and a long integer first record offset for each active transaction.