diff --git a/binarystore.cpp b/binarystore.cpp
index dff423e..9c37e47 100644
--- a/binarystore.cpp
+++ b/binarystore.cpp
@@ -7,6 +7,7 @@
 #include <boost/endian/arithmetic.hpp>
 #include <cstdint>
 #include <memory>
+#include <phosphor-logging/elog.hpp>
 #include <string>
 #include <vector>
 
@@ -21,6 +22,8 @@
 namespace binstore
 {
 
+using namespace phosphor::logging;
+
 std::unique_ptr<BinaryStoreInterface>
     BinaryStore::createFromConfig(const std::string& baseBlobId,
                                   std::unique_ptr<SysFile> file,
@@ -28,6 +31,8 @@
 {
     if (baseBlobId.empty() || !file)
     {
+        log<level::ERR>("Unable to create binarystore from invalid config",
+                        entry("BASE_ID=%s", baseBlobId.c_str()));
         return nullptr;
     }
 
@@ -61,12 +66,16 @@
 {
     if (!(flags & blobs::OpenFlags::read))
     {
+        log<level::ERR>("OpenFlags::read not specified when opening",
+                        entry("BLOB_ID=%s", blobId.c_str()));
         return false;
     }
 
     if (currentBlob_ && (currentBlob_->blob_id() != blobId))
     {
-        /* Already handling a different blob */
+        log<level::ERR>("Already handling a different blob",
+                        entry("EXPECTED=%s", currentBlob_->blob_id().c_str()),
+                        entry("RECEIVED=%s", blobId.c_str()));
         return false;
     }
 
@@ -76,6 +85,8 @@
      * Note it will overwrite existing unsaved data per design. */
     if (commitState_ != CommitState::Clean)
     {
+        log<level::NOTICE>("Try loading blob from persistent data",
+                           entry("BLOB_ID=%s", blobId.c_str()));
         try
         {
             /* Parse length-prefixed format to protobuf */
@@ -87,13 +98,16 @@
             {
                 /* Fail to parse the data, which might mean no preexsiting data
                  * and is a valid case to handle */
-                // TODO: logging
+                log<level::WARNING>(
+                    "Fail to parse. There might be no persisted blobs",
+                    entry("BLOB_ID=%s", blobId.c_str()));
             }
         }
         catch (const std::exception& e)
         {
             /* Read causes unexpected system-level failure */
-            // TODO: logging
+            log<level::ERR>("Reading from sysfile failed",
+                            entry("ERROR=%s", e.what()));
             return false;
         }
     }
@@ -115,6 +129,7 @@
     currentBlob_ = blob_.add_blobs();
     currentBlob_->set_blob_id(blobId);
 
+    log<level::NOTICE>("Created new blob", entry("BLOB_ID=%s", blobId.c_str()));
     return true;
 }
 
@@ -129,6 +144,7 @@
 
     if (!currentBlob_)
     {
+        log<level::ERR>("No open blob to read");
         return result;
     }
 
@@ -137,6 +153,9 @@
     /* If it is out of bound, return empty vector */
     if (offset >= dataPtr->size())
     {
+        log<level::ERR>("Read offset is beyond data size",
+                        entry("MAX_SIZE=0x%x", dataPtr->size()),
+                        entry("RECEIVED_OFFSET=0x%x", offset));
         return result;
     }
 
@@ -152,11 +171,13 @@
 {
     if (!currentBlob_)
     {
+        log<level::ERR>("No open blob to write");
         return false;
     }
 
     if (!writable_)
     {
+        log<level::ERR>("Open blob is not writable");
         return false;
     }
 
@@ -164,7 +185,7 @@
 
     if (offset > dataPtr->size())
     {
-        /* Will leave a gap with undefined data */
+        log<level::ERR>("Write would leave a gap with undefined data. Return.");
         return false;
     }
 
@@ -192,6 +213,8 @@
     catch (const std::exception& e)
     {
         commitState_ = CommitState::CommitError;
+        log<level::ERR>("Writing to sysfile failed",
+                        entry("ERROR=%s", e.what()));
         return false;
     };
 
diff --git a/test/Makefile.am b/test/Makefile.am
index cff1416..2e36c8e 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -3,11 +3,13 @@
 	$(GTEST_CFLAGS) \
 	$(GMOCK_CFLAGS)
 AM_CXXFLAGS = \
-	$(GTEST_MAIN_CFLAGS)
+	$(GTEST_MAIN_CFLAGS) \
+	$(PHOSPHOR_LOGGING_CFLAGS)
 AM_LDFLAGS = \
 	$(GMOCK_LIBS) \
 	$(GTEST_MAIN_LIBS) \
-	$(OESDK_TESTCASE_FLAGS)
+	$(OESDK_TESTCASE_FLAGS) \
+	$(PHOSPHOR_LOGGING_LIBS)
 
 # Run all 'check' test programs
 check_PROGRAMS = \
