diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/Transaction.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/Transaction.java
index 8ad8cb8..0e2e45d 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/Transaction.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/Transaction.java
@@ -25,6 +25,8 @@
 import org.onosproject.store.service.Version;
 import org.onosproject.store.service.TransactionContext;
 import org.onosproject.store.service.TransactionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkState;
@@ -105,6 +107,7 @@
     private static final String TX_INACTIVE_ERROR = "transaction is not active";
     private static final String TX_UNPREPARED_ERROR = "transaction has not been prepared";
 
+    protected final Logger log = LoggerFactory.getLogger(getClass());
     protected final TransactionId transactionId;
     protected final Transactional<T> transactionalObject;
     private final AtomicBoolean open = new AtomicBoolean();
@@ -191,9 +194,11 @@
      * @return a completable future to be completed once the transaction has been started
      */
     public CompletableFuture<Version> begin() {
+        log.debug("Beginning transaction {} for {}", transactionId, transactionalObject);
         open();
         return transactionalObject.begin(transactionId).thenApply(lock -> {
             this.lock = lock;
+            log.trace("Transaction lock acquired: {}", lock);
             return lock;
         });
     }
@@ -212,6 +217,7 @@
     public CompletableFuture<Boolean> prepare(List<T> updates) {
         checkOpen();
         checkActive();
+        log.debug("Preparing transaction {} for {}", transactionId, transactionalObject);
         Version lock = this.lock;
         checkState(lock != null, TX_INACTIVE_ERROR);
         setState(State.PREPARING);
@@ -234,6 +240,7 @@
     public CompletableFuture<Boolean> prepareAndCommit(List<T> updates) {
         checkOpen();
         checkActive();
+        log.debug("Preparing and committing transaction {} for {}", transactionId, transactionalObject);
         Version lock = this.lock;
         checkState(lock != null, TX_INACTIVE_ERROR);
         setState(State.PREPARING);
@@ -255,6 +262,7 @@
     public CompletableFuture<Void> commit() {
         checkOpen();
         checkPrepared();
+        log.debug("Committing transaction {} for {}", transactionId, transactionalObject);
         setState(State.COMMITTING);
         return transactionalObject.commit(transactionId).thenRun(() -> {
             setState(State.COMMITTED);
@@ -271,6 +279,7 @@
     public CompletableFuture<Void> rollback() {
         checkOpen();
         checkPrepared();
+        log.debug("Rolling back transaction {} for {}", transactionId, transactionalObject);
         setState(State.ROLLING_BACK);
         return transactionalObject.rollback(transactionId).thenRun(() -> {
             setState(State.ROLLED_BACK);
