diff --git a/asterixdb/asterix-transactions/pom.xml b/asterixdb/asterix-transactions/pom.xml
index ad044cb..07dcf5d 100644
--- a/asterixdb/asterix-transactions/pom.xml
+++ b/asterixdb/asterix-transactions/pom.xml
@@ -159,5 +159,9 @@
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-util</artifactId>
     </dependency>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+    </dependency>
   </dependencies>
 </project>
diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBufferTailReader.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBufferTailReader.java
index 5ed5724..550b747 100644
--- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBufferTailReader.java
+++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/logging/LogBufferTailReader.java
@@ -19,12 +19,17 @@
 package org.apache.asterix.transaction.management.service.logging;
 
 import java.nio.ByteBuffer;
+import java.util.Arrays;
 
 import org.apache.asterix.common.transactions.ILogRecord.RecordReadStatus;
 import org.apache.asterix.common.transactions.LogRecord;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class LogBufferTailReader {
 
+    private static final Logger LOGGER = LogManager.getLogger();
     private final ByteBuffer buffer;
     private final LogRecord logRecord;
     private int endOffset;
@@ -46,8 +51,19 @@
         RecordReadStatus status = logRecord.readLogRecord(buffer);
         //underflow is not expected because we are at the very tail of the current log buffer
         if (status != RecordReadStatus.OK) {
-            throw new IllegalStateException();
+            logReadFailure(status);
+            throw new IllegalStateException("Unexpected log read status: " + status);
         }
         return logRecord;
     }
+
+    private void logReadFailure(RecordReadStatus status) {
+        final int bufferRemaining = endOffset - buffer.position();
+        final byte[] remainingData = new byte[bufferRemaining];
+        buffer.get(remainingData);
+        final char[] hexData = Hex.encodeHex(remainingData);
+        LOGGER.error(
+                "Unexpected read status {}, read Log: {},  buffer remaining at read: {}, buffer remaining content: {}",
+                status, bufferRemaining, logRecord.getLogRecordForDisplay(), Arrays.toString(hexData));
+    }
 }
diff --git a/asterixdb/asterix-transactions/src/test/java/org/apache/asterix/transaction/management/service/locking/LogBufferTailReaderTest.java b/asterixdb/asterix-transactions/src/test/java/org/apache/asterix/transaction/management/service/locking/LogBufferTailReaderTest.java
new file mode 100644
index 0000000..3083605
--- /dev/null
+++ b/asterixdb/asterix-transactions/src/test/java/org/apache/asterix/transaction/management/service/locking/LogBufferTailReaderTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.transaction.management.service.locking;
+
+import java.nio.ByteBuffer;
+
+import org.apache.asterix.transaction.management.service.logging.LogBufferTailReader;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class LogBufferTailReaderTest {
+
+    @Test
+    public void readFailureTest() {
+        ByteBuffer buffer = ByteBuffer.allocate(5);
+        LogBufferTailReader reader = new LogBufferTailReader(buffer);
+        reader.initializeScan(0, 1);
+        boolean failed = false;
+        try {
+            reader.next();
+        } catch (Exception e) {
+            failed = true;
+        }
+        Assert.assertTrue(failed);
+    }
+}
\ No newline at end of file
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 41b27fb..b555cde 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -1193,6 +1193,11 @@
           </exclusion>
         </exclusions>
       </dependency>
+      <dependency>
+        <groupId>commons-codec</groupId>
+        <artifactId>commons-codec</artifactId>
+        <version>1.9</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 
