Windows requires that file handles be closed prior to renaming files. In
addition, the inode on non-Unix OSes is always zero. This PR closes the
log files prior to rotation (instead of after) and ensures the case
where the file descriptor is `undefined` is handled.