Adding consistent logging for command handling.
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/AcceptPaymentCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/AcceptPaymentCommand.java
index 4ba25ae..00916ff 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/AcceptPaymentCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/AcceptPaymentCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "AcceptPaymentCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/ApproveCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/ApproveCommand.java
index 2205751..25b2613 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/ApproveCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/ApproveCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "ApproveCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/CloseCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/CloseCommand.java
index d7fcfd9..3829eeb 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/CloseCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/CloseCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "CloseCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/DenyCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/DenyCommand.java
index 934c51f..1592e21 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/DenyCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/DenyCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "DenyCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/DisburseCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/DisburseCommand.java
index 7cf5b80..c251232 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/DisburseCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/DisburseCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "DisburseCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/OpenCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/OpenCommand.java
index ef9dcf0..1330537 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/OpenCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/OpenCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "OpenCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/RecoverCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/RecoverCommand.java
index e950809..2eecd8c 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/RecoverCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/RecoverCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "RecoverCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/WriteOffCommand.java b/service/src/main/java/io/mifos/individuallending/internal/command/WriteOffCommand.java
index 1c3192a..3859035 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/WriteOffCommand.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/WriteOffCommand.java
@@ -34,4 +34,12 @@
   public String getCaseIdentifier() {
     return caseIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "WriteOffCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", caseIdentifier='" + caseIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/individuallending/internal/command/handler/IndividualLoanCommandHandler.java b/service/src/main/java/io/mifos/individuallending/internal/command/handler/IndividualLoanCommandHandler.java
index ff7d4b0..c72e65e 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/command/handler/IndividualLoanCommandHandler.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/command/handler/IndividualLoanCommandHandler.java
@@ -16,6 +16,7 @@
 package io.mifos.individuallending.internal.command.handler;
 
 
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.individuallending.api.v1.domain.workflow.Action;
 import io.mifos.individuallending.api.v1.events.IndividualLoanCommandEvent;
 import io.mifos.individuallending.api.v1.events.IndividualLoanEventConstants;
@@ -47,7 +48,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.OPEN_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final OpenCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -58,7 +59,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.DENY_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final DenyCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -68,7 +69,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.APPROVE_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final ApproveCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -78,7 +79,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.DISBURSE_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final DisburseCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -88,7 +89,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.ACCEPT_PAYMENT_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final AcceptPaymentCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -98,7 +99,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.WRITE_OFF_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final WriteOffCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -108,7 +109,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.CLOSE_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final CloseCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
@@ -118,7 +119,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = IndividualLoanEventConstants.RECOVER_INDIVIDUALLOAN_CASE)
   public IndividualLoanCommandEvent process(final RecoverCommand command) {
     final CaseEntity customerCase = getCaseOrThrow(command.getProductIdentifier(), command.getCaseIdentifier());
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeCaseCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeCaseCommand.java
index 295f889..5d6c3a7 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeCaseCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeCaseCommand.java
@@ -38,4 +38,11 @@
   public void setInstance(Case instance) {
     this.instance = instance;
   }
+
+  @Override
+  public String toString() {
+    return "ChangeCaseCommand{" +
+            "instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeChargeDefinitionCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeChargeDefinitionCommand.java
index 36a1747..b924dbc 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeChargeDefinitionCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeChargeDefinitionCommand.java
@@ -36,4 +36,12 @@
   public ChargeDefinition getInstance() {
     return instance;
   }
+
+  @Override
+  public String toString() {
+    return "ChangeChargeDefinitionCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeEnablingOfProductCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeEnablingOfProductCommand.java
index 86e92ed..f776b4d 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeEnablingOfProductCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeEnablingOfProductCommand.java
@@ -34,4 +34,12 @@
   public Boolean getEnabled() {
     return enabled;
   }
+
+  @Override
+  public String toString() {
+    return "ChangeEnablingOfProductCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", enabled=" + enabled +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeProductCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeProductCommand.java
index 90b6ba1..dbbab49 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeProductCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeProductCommand.java
@@ -38,4 +38,11 @@
   public void setInstance(Product instance) {
     this.instance = instance;
   }
+
+  @Override
+  public String toString() {
+    return "ChangeProductCommand{" +
+            "instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeTaskDefinitionCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeTaskDefinitionCommand.java
index 8227f5e..7c654b2 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeTaskDefinitionCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/ChangeTaskDefinitionCommand.java
@@ -36,4 +36,12 @@
   public TaskDefinition getInstance() {
     return instance;
   }
+
+  @Override
+  public String toString() {
+    return "ChangeTaskDefinitionCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateBeatPublishCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateBeatPublishCommand.java
index c64eeb7..b483b6a 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateBeatPublishCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateBeatPublishCommand.java
@@ -30,4 +30,11 @@
   public BeatPublish getInstance() {
     return instance;
   }
+
+  @Override
+  public String toString() {
+    return "CreateBeatPublishCommand{" +
+            "instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateCaseCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateCaseCommand.java
index 521fc47..9e5600f 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateCaseCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateCaseCommand.java
@@ -30,4 +30,11 @@
   public Case getCase() {
     return instance;
   }
+
+  @Override
+  public String toString() {
+    return "CreateCaseCommand{" +
+            "instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateChargeDefinitionCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateChargeDefinitionCommand.java
index 0b49e7c..8653d5f 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateChargeDefinitionCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateChargeDefinitionCommand.java
@@ -36,4 +36,12 @@
   public ChargeDefinition getInstance() {
     return instance;
   }
+
+  @Override
+  public String toString() {
+    return "CreateChargeDefinitionCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateProductCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateProductCommand.java
index 8537b05..b29cfae 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateProductCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateProductCommand.java
@@ -38,4 +38,11 @@
   public void setInstance(Product instance) {
     this.instance = instance;
   }
+
+  @Override
+  public String toString() {
+    return "CreateProductCommand{" +
+            "instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateTaskDefinitionCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateTaskDefinitionCommand.java
index b8946a0..68a200b 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateTaskDefinitionCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/CreateTaskDefinitionCommand.java
@@ -36,4 +36,12 @@
   public TaskDefinition getInstance() {
     return instance;
   }
+
+  @Override
+  public String toString() {
+    return "CreateTaskDefinitionCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", instance=" + instance.getIdentifier() +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/DeleteProductChargeDefinitionCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/DeleteProductChargeDefinitionCommand.java
index f8722e8..3b2917d 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/DeleteProductChargeDefinitionCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/DeleteProductChargeDefinitionCommand.java
@@ -34,4 +34,12 @@
   public String getChargeDefinitionIdentifier() {
     return chargeDefinitionIdentifier;
   }
+
+  @Override
+  public String toString() {
+    return "DeleteProductChargeDefinitionCommand{" +
+            "productIdentifier='" + productIdentifier + '\'' +
+            ", chargeDefinitionIdentifier='" + chargeDefinitionIdentifier + '\'' +
+            '}';
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/InitializeServiceCommand.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/InitializeServiceCommand.java
index 746220e..63961f1 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/InitializeServiceCommand.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/InitializeServiceCommand.java
@@ -20,4 +20,9 @@
   public InitializeServiceCommand() {
     super();
   }
+
+  @Override
+  public String toString() {
+    return "InitializeServiceCommand{}";
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/BeatPublishCommandHandler.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/BeatPublishCommandHandler.java
index bfa9e56..d879094 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/BeatPublishCommandHandler.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/BeatPublishCommandHandler.java
@@ -17,6 +17,7 @@
 
 import io.mifos.core.command.annotation.Aggregate;
 import io.mifos.core.command.annotation.CommandHandler;
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.core.command.annotation.EventEmitter;
 import io.mifos.core.lang.ApplicationName;
 import io.mifos.rhythm.spi.v1.domain.BeatPublish;
@@ -41,7 +42,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_PUBLISHEDBEAT)
   public BeatPublishEvent process(final CreateBeatPublishCommand createBeatPublishCommand) {
     final BeatPublish instance = createBeatPublishCommand.getInstance();
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/CaseCommandHandler.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/CaseCommandHandler.java
index d9ebe61..3a45289 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/CaseCommandHandler.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/CaseCommandHandler.java
@@ -17,6 +17,7 @@
 
 import io.mifos.core.command.annotation.Aggregate;
 import io.mifos.core.command.annotation.CommandHandler;
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.core.command.annotation.EventEmitter;
 import io.mifos.core.lang.ServiceException;
 import io.mifos.portfolio.api.v1.domain.Case;
@@ -54,7 +55,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_CASE)
   public CaseEvent process(final CreateCaseCommand createCaseCommand) {
     //TODO: Check that all designators are assigned to existing accounts.
@@ -82,7 +83,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.PUT_CASE)
   public CaseEvent process(final ChangeCaseCommand changeCaseCommand) {
     final Case instance = changeCaseCommand.getInstance();
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ChargeDefinitionCommandHandler.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ChargeDefinitionCommandHandler.java
index acacee2..ddd1b16 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ChargeDefinitionCommandHandler.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ChargeDefinitionCommandHandler.java
@@ -15,6 +15,7 @@
  */
 package io.mifos.portfolio.service.internal.command.handler;
 
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.portfolio.api.v1.domain.ChargeDefinition;
 import io.mifos.portfolio.api.v1.events.ChargeDefinitionEvent;
 import io.mifos.portfolio.api.v1.events.EventConstants;
@@ -31,6 +32,7 @@
 import io.mifos.core.command.annotation.EventEmitter;
 import io.mifos.core.lang.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author Myrle Krantz
@@ -49,7 +51,8 @@
   }
 
   @SuppressWarnings("unused")
-  @CommandHandler
+  @Transactional
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_CHARGE_DEFINITION)
   public ChargeDefinitionEvent process(final CreateChargeDefinitionCommand command) {
     final ChargeDefinition chargeDefinition = command.getInstance();
@@ -69,7 +72,8 @@
   }
 
   @SuppressWarnings("unused")
-  @CommandHandler
+  @Transactional
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.PUT_CHARGE_DEFINITION)
   public ChargeDefinitionEvent process(final ChangeChargeDefinitionCommand command) {
     final ChargeDefinition chargeDefinition = command.getInstance();
@@ -91,7 +95,8 @@
   }
 
   @SuppressWarnings("unused")
-  @CommandHandler
+  @Transactional
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.DELETE_PRODUCT_CHARGE_DEFINITION)
   public ChargeDefinitionEvent process(final DeleteProductChargeDefinitionCommand command) {
     final ChargeDefinitionEntity toDelete = chargeDefinitionRepository.findByProductIdAndChargeDefinitionIdentifier(
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/InitializeCommandHandler.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/InitializeCommandHandler.java
index b0803fd..93299b6 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/InitializeCommandHandler.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/InitializeCommandHandler.java
@@ -15,6 +15,7 @@
  */
 package io.mifos.portfolio.service.internal.command.handler;
 
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.portfolio.api.v1.events.EventConstants;
 import io.mifos.portfolio.service.ServiceConstants;
 import io.mifos.portfolio.service.internal.command.InitializeServiceCommand;
@@ -35,28 +36,24 @@
 @Aggregate
 public class InitializeCommandHandler {
 
-  private final Logger logger;
   private final DataSource dataSource;
   private final FlywayFactoryBean flywayFactoryBean;
   private final RhythmAdapter rhythmAdapter;
 
   @SuppressWarnings("SpringJavaAutowiringInspection")
   @Autowired
-  public InitializeCommandHandler(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
-                                  final DataSource dataSource,
+  public InitializeCommandHandler(final DataSource dataSource,
                                   final FlywayFactoryBean flywayFactoryBean,
                                   final RhythmAdapter rhythmAdapter) {
     super();
-    this.logger = logger;
     this.dataSource = dataSource;
     this.flywayFactoryBean = flywayFactoryBean;
     this.rhythmAdapter = rhythmAdapter;
   }
 
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.INITIALIZE)
   public String initialize(final InitializeServiceCommand initializeServiceCommand) {
-    this.logger.info("Start service migration.");
     this.flywayFactoryBean.create(this.dataSource).migrate();
     rhythmAdapter.request24Beats();
     return EventConstants.INITIALIZE;
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ProductCommandHandler.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ProductCommandHandler.java
index 569c9c8..e9de6d8 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ProductCommandHandler.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/ProductCommandHandler.java
@@ -17,6 +17,7 @@
 
 import io.mifos.core.command.annotation.Aggregate;
 import io.mifos.core.command.annotation.CommandHandler;
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.core.command.annotation.EventEmitter;
 import io.mifos.core.lang.ServiceException;
 import io.mifos.portfolio.api.v1.domain.AccountAssignment;
@@ -67,7 +68,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_PRODUCT)
   public String process(final CreateProductCommand createProductCommand) {
     final PatternFactory patternFactory = patternFactoryRegistry
@@ -88,7 +89,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.PUT_PRODUCT)
   public String process(final ChangeProductCommand changeProductCommand) {
     final Product instance = changeProductCommand.getInstance();
@@ -108,7 +109,7 @@
   }
 
   @Transactional
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue =  EventConstants.PUT_PRODUCT_ENABLE)
   public String process(final ChangeEnablingOfProductCommand changeEnablingOfProductCommand)
   {
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/TaskDefinitionCommandHandler.java b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/TaskDefinitionCommandHandler.java
index 4098e26..039ba68 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/TaskDefinitionCommandHandler.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/command/handler/TaskDefinitionCommandHandler.java
@@ -15,6 +15,7 @@
  */
 package io.mifos.portfolio.service.internal.command.handler;
 
+import io.mifos.core.command.annotation.CommandLogLevel;
 import io.mifos.portfolio.api.v1.domain.TaskDefinition;
 import io.mifos.portfolio.api.v1.events.EventConstants;
 import io.mifos.portfolio.api.v1.events.TaskDefinitionEvent;
@@ -48,7 +49,7 @@
     this.taskDefinitionRepository = taskDefinitionRepository;
   }
 
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_TASK_DEFINITION)
   public TaskDefinitionEvent process(final CreateTaskDefinitionCommand createTaskDefinitionCommand) {
     final TaskDefinition taskDefinition = createTaskDefinitionCommand.getInstance();
@@ -67,7 +68,7 @@
             createTaskDefinitionCommand.getInstance().getIdentifier());
   }
 
-  @CommandHandler
+  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
   @EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.PUT_TASK_DEFINITION)
   public TaskDefinitionEvent process(final ChangeTaskDefinitionCommand changeTaskDefinitionCommand) {
     final TaskDefinition taskDefinition = changeTaskDefinitionCommand.getInstance();