diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtils.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtils.java
index a1cf7e1..8073c95 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtils.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtils.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -425,7 +426,7 @@
                     try {
                         LOGGER.debug("Current stack " + this.getOutputsAsStringBuilder(heatStack).toString());
                     } catch (Exception e) {
-                        LOGGER.debug("an error occurred trying to print out the current outputs of the stack");
+                        LOGGER.debug("an error occurred trying to print out the current outputs of the stack", e);
                     }
 
                     if ("CREATE_IN_PROGRESS".equals (heatStack.getStackStatus ())) {
@@ -578,7 +579,7 @@
 
                 			} catch (MsoException me2) {
                 				// We got an exception on the delete - don't throw this exception - throw the original - just log.
-                				LOGGER.debug("Exception thrown trying to delete " + canonicalName + " on a create->rollback: " + me2.getContextMessage());
+                				LOGGER.debug("Exception thrown trying to delete " + canonicalName + " on a create->rollback: " + me2.getContextMessage(), me2);
                 				LOGGER.warn(MessageEnum.RA_CREATE_STACK_ERR, "Create Stack errored, then stack deletion FAILED - exception thrown", "", "", MsoLogger.ErrorCode.BusinessProcesssError, me2.getContextMessage());
                 			}
 
@@ -1178,7 +1179,7 @@
 						String str = this.convertNode((JsonNode) obj);
 						inputs.put(key, str);
 					} catch (Exception e) {
-						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode "+ key);
+						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for JsonNode "+ key, e);
 						//effect here is this value will not have been copied to the inputs - and therefore will error out downstream
 					}
 				} else if (obj instanceof java.util.LinkedHashMap) {
@@ -1187,21 +1188,21 @@
 						String str = JSON_MAPPER.writeValueAsString(obj);
 						inputs.put(key, str);
 					} catch (Exception e) {
-						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap "+ key);
+						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for LinkedHashMap "+ key, e);
 					}
 				} else if (obj instanceof Integer) {
 					try {
 						String str = "" + obj;
 						inputs.put(key, str);
 					} catch (Exception e) {
-						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for Integer "+ key);
+						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for Integer "+ key, e);
 					}
 				} else {
 					try {
 						String str = obj.toString();
 						inputs.put(key, str);
 					} catch (Exception e) {
-						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for Other "+ key +" (" + e.getMessage() + ")");
+						LOGGER.debug("DANGER WILL ROBINSON: unable to convert value for Other "+ key +" (" + e.getMessage() + ")", e);
 						//effect here is this value will not have been copied to the inputs - and therefore will error out downstream
 					}
 				}
@@ -1237,7 +1238,7 @@
 						String str = params.get(key).toString();
 						sb.append("\n" + key + "=" + str);
 					} catch (Exception e) {
-						//non fatal
+						LOGGER.debug("Exception :",e);
 					}
 				}
 			}
@@ -1251,9 +1252,9 @@
 			final String json = JSON_MAPPER.writeValueAsString(obj);
 			return json;
 		} catch (JsonParseException jpe) {
-			LOGGER.debug("Error converting json to string " + jpe.getMessage());
+			LOGGER.debug("Error converting json to string " + jpe.getMessage(), jpe);
 		} catch (Exception e) {
-			LOGGER.debug("Error converting json to string " + e.getMessage());
+			LOGGER.debug("Error converting json to string " + e.getMessage(), e);
 		}
 		return "[Error converting json to string]";
 	}
@@ -1290,6 +1291,7 @@
 					String str = JSON_MAPPER.writeValueAsString(obj);
 					sb.append(str + " (a java.util.LinkedHashMap)");
 				} catch (Exception e) {
+					LOGGER.debug("Exception :",e);
 					sb.append("(a LinkedHashMap value that would not convert nicely)");
 				}				
 			} else if (obj instanceof Integer) {
@@ -1297,6 +1299,7 @@
 				try {
 					str = obj.toString() + " (an Integer)\n";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :",e);
 					str = "(an Integer unable to call .toString() on)";
 				}
 				sb.append(str);
@@ -1305,6 +1308,7 @@
 				try {
 					str = obj.toString() + " (an ArrayList)";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :",e);
 					str = "(an ArrayList unable to call .toString() on?)";
 				}
 				sb.append(str);
@@ -1313,6 +1317,7 @@
 				try {
 					str = obj.toString() + " (a Boolean)";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :",e);
 					str = "(an Boolean unable to call .toString() on?)";
 				}
 				sb.append(str);
@@ -1322,6 +1327,7 @@
 				try {
 					str = obj.toString() + " (unknown Object type)";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :",e);
 					str = "(a value unable to call .toString() on?)";
 				}
 				sb.append(str);
@@ -1399,7 +1405,7 @@
 			String jsonString = lhm.toString();
 			jsonNode = new ObjectMapper().readTree(jsonString);
 		} catch (Exception e) {
-			LOGGER.debug("Unable to convert " + lhm.toString() + " to a JsonNode " + e.getMessage());
+			LOGGER.debug("Unable to convert " + lhm.toString() + " to a JsonNode " + e.getMessage(), e);
 			jsonNode = null;
 		}
 		return jsonNode;
@@ -1450,7 +1456,7 @@
 			Set<HeatTemplateParam> paramSet = template.getParameters();
 			LOGGER.debug("paramSet has " + paramSet.size() + " entries");
 		} catch (Exception e) {
-			LOGGER.debug("Exception occurred in convertInputMap:" + e.getMessage());
+			LOGGER.debug("Exception occurred in convertInputMap:" + e.getMessage(), e);
 		}
 		
 		for (HeatTemplateParam htp : template.getParameters()) {
@@ -1497,7 +1503,7 @@
 				try {
 					anInteger = Integer.parseInt(integerString);
 				} catch (Exception e) {
-					LOGGER.debug("Unable to convert " + integerString + " to an integer!!");
+					LOGGER.debug("Unable to convert " + integerString + " to an integer!!", e);
 					anInteger = null;
 				}
 				if (anInteger != null) {
@@ -1518,7 +1524,7 @@
     			try {
     				jsonNode = new ObjectMapper().readTree(jsonString);
     			} catch (Exception e) {
-					LOGGER.debug("Unable to convert " + jsonString + " to a JsonNode!!");
+					LOGGER.debug("Unable to convert " + jsonString + " to a JsonNode!!", e);
 					jsonNode = null;
     			}
     			if (jsonNode != null) {
@@ -1542,7 +1548,7 @@
 					else
 						newInputs.put(key, anArrayList);
 				} catch (Exception e) {
-					LOGGER.debug("Unable to convert " + commaSeparated + " to an ArrayList!!");
+					LOGGER.debug("Unable to convert " + commaSeparated + " to an ArrayList!!", e);
 					if (alias)
 						newInputs.put(realName, commaSeparated);
 					else
diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtilsWithUpdate.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtilsWithUpdate.java
index 1497e2d..dba52d4 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtilsWithUpdate.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoHeatUtilsWithUpdate.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -281,7 +282,7 @@
                     try {
                     	LOGGER.debug("Current stack " + this.getOutputsAsStringBuilder(heatStack).toString());
                     } catch (Exception e) {
-                    	LOGGER.debug("an error occurred trying to print out the current outputs of the stack");
+                    	LOGGER.debug("an error occurred trying to print out the current outputs of the stack", e);
                     }
 
 
@@ -378,6 +379,7 @@
 					String str = JSON_MAPPER.writeValueAsString(obj);
 					sb.append(str + " (a java.util.LinkedHashMap)");
 				} catch (Exception e) {
+					LOGGER.debug("Exception :", e);
 					sb.append("(a LinkedHashMap value that would not convert nicely)");
 				}				
 			} else if (obj instanceof Integer) {
@@ -385,6 +387,7 @@
 				try {
 					str = obj.toString() + " (an Integer)\n";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :", e);
 					str = "(an Integer unable to call .toString() on)";
 				}
 				sb.append(str);
@@ -393,6 +396,7 @@
 				try {
 					str = obj.toString() + " (an ArrayList)";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :", e);
 					str = "(an ArrayList unable to call .toString() on?)";
 				}
 				sb.append(str);
@@ -401,6 +405,7 @@
 				try {
 					str = obj.toString() + " (a Boolean)";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :", e);
 					str = "(an Boolean unable to call .toString() on?)";
 				}
 				sb.append(str);
@@ -410,6 +415,7 @@
 				try {
 					str = obj.toString() + " (unknown Object type)";
 				} catch (Exception e) {
+					LOGGER.debug("Exception :", e);
 					str = "(a value unable to call .toString() on?)";
 				}
 				sb.append(str);
@@ -426,9 +432,9 @@
 			final String json = JSON_MAPPER.writeValueAsString(obj);
 			return json;
 		} catch (JsonParseException jpe) {
-			LOGGER.debug("Error converting json to string " + jpe.getMessage());
+			LOGGER.debug("Error converting json to string " + jpe.getMessage(), jpe);
 		} catch (Exception e) {
-			LOGGER.debug("Error converting json to string " + e.getMessage());
+			LOGGER.debug("Error converting json to string " + e.getMessage(), e);
 		}
 		return "[Error converting json to string]";
 	}
diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoYamlEditorWithEnvt.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoYamlEditorWithEnvt.java
index 712b18a..4e715fa 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoYamlEditorWithEnvt.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/openstack/utils/MsoYamlEditorWithEnvt.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVfModuleResponse.java b/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVfModuleResponse.java
index da35b0e..f3f252d 100644
--- a/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVfModuleResponse.java
+++ b/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVfModuleResponse.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,8 @@
 
 package org.openecomp.mso.adapters.vnfrest;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 
 import java.util.Map;
 
@@ -27,12 +30,13 @@
 
 import org.codehaus.jackson.map.ObjectMapper;
 import org.jboss.resteasy.annotations.providers.NoJackson;
-
+import org.openecomp.mso.logger.MsoLogger;
 import org.openecomp.mso.openstack.beans.VnfStatus;
 
 @XmlRootElement(name = "queryVfModuleResponse")
 @NoJackson
 public class QueryVfModuleResponse {
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
 	private String vnfId;
 	private String vfModuleId;
 	private String vfModuleStackId;
@@ -100,7 +104,9 @@
 			ObjectMapper mapper = new ObjectMapper();
 			jsonString = mapper.writeValueAsString(this);
 		}
-		catch (Exception e) {}
+		catch (Exception e) {
+			LOGGER.debug("Exception :",e);
+		}
 		return jsonString;
 	}
 }
diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVolumeGroupResponse.java b/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVolumeGroupResponse.java
index 776bdf3..e70b9dd 100644
--- a/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVolumeGroupResponse.java
+++ b/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/QueryVolumeGroupResponse.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,11 +30,14 @@
 import org.codehaus.jackson.map.SerializationConfig;
 import org.jboss.resteasy.annotations.providers.NoJackson;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 import org.openecomp.mso.openstack.beans.VnfStatus;
 
 @XmlRootElement(name = "queryVolumeGroupResponse")
 @NoJackson
 public class QueryVolumeGroupResponse {
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
 	private String volumeGroupId;
 	private String volumeGroupStackId;
 	private VnfStatus volumeGroupStatus;
@@ -94,7 +98,9 @@
 			mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 			jsonString = mapper.writeValueAsString(this);
 		}
-		catch (Exception e) {}
+		catch (Exception e) {
+			LOGGER.debug("Exception :",e);
+		}
 		return jsonString;
 	}
 }
diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/VfResponseCommon.java b/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/VfResponseCommon.java
index 39201d5..4a902bd 100644
--- a/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/VfResponseCommon.java
+++ b/adapters/mso-adapters-rest-interface/src/main/java/org/openecomp/mso/adapters/vnfrest/VfResponseCommon.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,8 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Marshaller;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.SerializationConfig;
 
@@ -34,6 +37,7 @@
  * except for QueryVfModuleResponse and QueryVolumeGroupResponse.
  */
 public abstract class VfResponseCommon {
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
 	private String messageId;
 
 	public VfResponseCommon() {
@@ -60,8 +64,7 @@
 			jsonString = mapper.writeValueAsString(this);
 			return jsonString;
 		} catch (Exception e) {
-			// Shouldn't happen...
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 			return "";
 		}
 	}
@@ -75,8 +78,7 @@
 			marshaller.marshal(this, bs);
 			return bs.toString();
 		} catch (Exception e) {
-			// Shouldn't happen...
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 			return "";
 		}
 	}
diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java
index 1d07d7d..253523e 100644
--- a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java
+++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -160,7 +161,7 @@
 				try {
 					EntityUtils.consume(httpResponse.getEntity());
 				} catch (Exception e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 
@@ -168,7 +169,7 @@
 				try {
 					method.reset();
 				} catch (Exception e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 
diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java
index 3b6c160..dc94a78 100644
--- a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java
+++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -99,6 +100,7 @@
 				contentType = ContentType.parse(contentTypeHeader);
 			} catch (Exception e) {
 				// If we don't get a valid one, we handle it below.
+				LOGGER.debug("Exception :",e);
 			}
 		}
 
diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java
index 761263f..f152931 100644
--- a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java
+++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,7 +37,7 @@
 		try {
 			return UriUtils.encodePathSegment(pathSegment, "UTF-8");
 		} catch (UnsupportedEncodingException e) {
-			throw new RuntimeException("UTF-8 encoding is not supported");
+			throw new RuntimeException("UTF-8 encoding is not supported",e);
 		}
 	}
 
diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java
index f722be7..3ca8527 100644
--- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java
+++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -397,7 +398,7 @@
     		outFile.write(payloadBytes, 0, payloadBytes.length);
     		outFile.close();
     		} catch (Exception e) { 
-            	e.printStackTrace();
+    			LOGGER.debug("Exception :",e);
                 LOGGER.error(MessageEnum.ASDC_ARTIFACT_DOWNLOAD_FAIL,
         				artifact.getArtifactName (),
         				artifact.getArtifactURL (),
diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java
index 176f655..70fa7c1 100644
--- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java
+++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -47,11 +48,14 @@
 import org.openecomp.mso.db.catalog.beans.ServiceToNetworks;
 import org.openecomp.mso.db.catalog.beans.VnfResource;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * This structure exists to avoid having issues if the order of the vfResource/vfmodule artifact is not good (tree structure).
  *
  */
 public final class VfResourceStructure {
+	
+	protected static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.ASDC);
 
 	private boolean isDeployedSuccessfully=false;
 	/**
@@ -231,11 +235,11 @@
 			return listVFModuleMetaData;
 
 		} catch (JsonParseException e) {
-			e.printStackTrace();
+			LOGGER.debug("JsonParseException : ",e);
 		} catch (JsonMappingException e) {
-			e.printStackTrace();
+			LOGGER.debug("JsonMappingException : ",e);
 		} catch (IOException e) {
-			e.printStackTrace();
+			LOGGER.debug("IOException : ",e);
 		}
 		return null;
 	}
diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/ToscaResourceInstaller.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/ToscaResourceInstaller.java
index 3d3c87f..f9fd9c3 100644
--- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/ToscaResourceInstaller.java
+++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/ToscaResourceInstaller.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -558,8 +559,7 @@
 			vfResourceStructure.setSuccessfulDeployment();
 			
 		}catch(Exception e){
-			System.out.println("Exception" + e.getMessage());
-			e.printStackTrace();
+			logger.debug("Exception :",e);
 			
 			Throwable dbExceptionToCapture = e;
 			while (!(dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException)
diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/NotificationLogging.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/NotificationLogging.java
index da356bd..9b38a50 100644
--- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/NotificationLogging.java
+++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/NotificationLogging.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,6 +34,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.openecomp.mso.logger.MsoLogger;
 import org.openecomp.sdc.api.notification.INotificationData;
 
 
@@ -40,6 +42,8 @@
 	
 	private static Map<Object, List<Method>> objectMethodsToLog = new HashMap<>();
 
+	protected static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.ASDC);
+	
 	private static InvocationHandler handler = new InvocationHandler() {
 		@Override
 		public Object invoke(Object arg0, Method arg1, Object[] arg2)
@@ -93,6 +97,7 @@
 					buffer.append(testNull(m.invoke(iNotif, (Object[])null)));
 				} catch (IllegalAccessException | IllegalArgumentException
 						| InvocationTargetException e) {
+					LOGGER.debug("Exception :"+e);
 					buffer.append("UNREADABLE");
 				}
 				buffer.append(System.lineSeparator());
diff --git a/bpmn/MSOCommonBPMN/pom.xml b/bpmn/MSOCommonBPMN/pom.xml
index 24c881d..89e5ce2 100644
--- a/bpmn/MSOCommonBPMN/pom.xml
+++ b/bpmn/MSOCommonBPMN/pom.xml
@@ -359,6 +359,11 @@
 			<scope>test</scope>
 		</dependency>
 		<dependency>
+            <groupId>org.openecomp.so</groupId>
+            <artifactId>common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+		<dependency>
 			<groupId>javax.ws.rs</groupId>
 			<artifactId>javax.ws.rs-api</artifactId>
 			<version>2.0</version>
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/util/CryptoHandler.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/util/CryptoHandler.java
index 5394ba9..e938a25 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/util/CryptoHandler.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/util/CryptoHandler.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,8 +22,10 @@
 package org.openecomp.mso.bpmn.common.util;
 
 import java.security.GeneralSecurityException;
+import org.openecomp.mso.logger.MsoLogger;
 
 public class CryptoHandler implements ICryptoHandler {
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 
 	private static String msoKey = "aa3871669d893c7fb8abbcda31b88b4f";
 	//private static String msoAaiPwd = "mso0206";
@@ -32,6 +35,7 @@
 		try {
 			return CryptoUtils.decrypt(msoAaiEncryptedPwd, msoKey);
 		} catch (GeneralSecurityException e) {
+			LOGGER.debug("GeneralSecurityException :",e);
 			return null;
 		}
 	}
@@ -41,6 +45,7 @@
 		try {
 			return CryptoUtils.encrypt(plainMsoPwd, msoKey);
 		} catch (GeneralSecurityException e) {
+			LOGGER.debug("GeneralSecurityException :",e);
 			return null;
 		}
 	}
@@ -50,6 +55,7 @@
 		try {
 			return CryptoUtils.decrypt(encryptedPwd, msoKey);
 		} catch (GeneralSecurityException e) {
+			LOGGER.debug("GeneralSecurityException :",e);
 			return null;
 		}
 	}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/AbstractCallbackService.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/AbstractCallbackService.java
index 49e42ac..a4a8859 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/AbstractCallbackService.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/AbstractCallbackService.java
@@ -76,6 +76,7 @@
 			logCallbackSuccess(method, startTime);
 			return new CallbackSuccess();
 		} catch (Exception e) {
+			LOGGER.debug("Exception :",e);
 			String msg = "Caught " + e.getClass().getSimpleName()
 				+ " processing " + messageEventName + " with " + correlationVariable
 				+ " = '" + correlationValue + "'";
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/WorkflowResource.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/WorkflowResource.java
index 7db4e76..7a53721 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/WorkflowResource.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/workflow/service/WorkflowResource.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -183,8 +184,7 @@
 			workflowResponse.setMessageCode(500);
 			return Response.status(500).entity(workflowResponse).build();
 		} catch (Exception ex) {
-			msoLogger.debug(LOGMARKER + "Exception in startProcessInstance by key");
-			ex.printStackTrace();
+			msoLogger.debug(LOGMARKER + "Exception in startProcessInstance by key",ex);
 			workflowResponse.setMessage("Fail" );
 			workflowResponse.setResponse("Error occurred while executing the process: " + ex.getMessage());
 			if (processInstance != null) workflowResponse.setProcessInstanceID(processInstance.getId());
@@ -258,6 +258,7 @@
 		try {
 			return pes.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult() == null ? true : false ;
 		} catch (Exception e) {
+			msoLogger.debug("Exception :",e);
 			return true;
 		}        
 	}
@@ -601,7 +602,7 @@
 					+ processKey 
 					+ " with response: " 
 					+ response.getResponse());
-			
+			msoLogger.debug("Exception :",ex);
 		}
 		
 		msoLogger.recordMetricEvent ( startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, 
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/CamundaDBSetup.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/CamundaDBSetup.java
index aba43eb..74bb59c 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/CamundaDBSetup.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/CamundaDBSetup.java
@@ -5,12 +5,14 @@
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 /**
  * Sets up the unit test (H2) database for Camunda.
  */
 public class CamundaDBSetup {
 	private static boolean isDBConfigured = false;
-
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 	public static synchronized void configure() throws SQLException {
 		if (isDBConfigured) {
 			return;
@@ -66,13 +68,13 @@
 			isDBConfigured = true;
 		} catch (SQLException e) {
 			System.out.println("CamundaDBSetup caught " + e.getClass().getSimpleName());
-			e.printStackTrace();
+			LOGGER.debug("SQLException :",e);
 		} finally {
 			if (stmt != null) {
 				try {
 					stmt.close();
 				} catch (Exception e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 
@@ -80,7 +82,7 @@
 				try {
 					connection.close();
 				} catch (Exception e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 		}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java
index eb1cd51..55f6221 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -200,6 +201,7 @@
             UUID uuid = UUID.fromString(id);
             return uuid.toString().equalsIgnoreCase(id);
         } catch (IllegalArgumentException iae) {
+        	msoLogger.debug("IllegalArgumentException :",iae);
             return false;
         }
     }
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java
index 9d3af1c..70f67a5 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -167,7 +168,7 @@
 				fileWatcherThread.join(waitInSeconds * 1000);
 			} catch (InterruptedException e) {
 				LOGGER.debug("FileWatcherThread " + System.identityHashCode(fileWatcherThread)
-					+ " shutdown did not occur within " + waitInSeconds + " seconds");
+					+ " shutdown did not occur within " + waitInSeconds + " seconds",e);
 			}
 
 			LOGGER.debug("Finished shutting down FileWatcherThread " + System.identityHashCode(fileWatcherThread));
@@ -257,7 +258,7 @@
 					reader.close();
 					LOGGER.debug("Closed " + fileName);
 				} catch (Exception e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 		}
@@ -351,12 +352,14 @@
 							}
 						}
 					} catch (InterruptedException e) {
+						LOGGER.debug("InterruptedException :",e);
 						break;
 					} catch (ClosedWatchServiceException e) {
 						LOGGER.info(
 								MessageEnum.BPMN_GENERAL_INFO,
 								"BPMN",
 								"FileWatcherThread shut down because the watch service was closed");
+						LOGGER.debug("ClosedWatchServiceException :",e);
 						break;
 					} catch (Exception e) {
 						LOGGER.error(
@@ -379,7 +382,7 @@
 					watchService.close();
 				} catch (IOException e) {
 					LOGGER.debug("FileWatcherThread caught " + e.getClass().getSimpleName()
-						+ " while closing the watch service");
+						+ " while closing the watch service",e);
 				}
 
 				LOGGER.info(MessageEnum.BPMN_GENERAL_INFO, "BPMN",
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
index f58efe7..ecdc1bf 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
@@ -11,6 +11,8 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 import org.openecomp.mso.bpmn.core.PropertyConfiguration;
 
 /**
@@ -22,6 +24,8 @@
 	private static Path bpmnPropertiesPath = null;
 	private static Path bpmnUrnPropertiesPath = null;
 	private static boolean modifiedConfiguration = false;
+	
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 
 	/**
 	 * Ensures that the the PropertyConfiguration is initialized and that the
@@ -232,7 +236,7 @@
 				try {
 					fileReader.close();
 				} catch (IOException e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 
@@ -240,7 +244,7 @@
 				try {
 					outputStream.close();
 				} catch (IOException e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 		}
@@ -279,7 +283,7 @@
 				try {
 					fileReader.close();
 				} catch (IOException e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 
@@ -287,7 +291,7 @@
 				try {
 					outputStream.close();
 				} catch (IOException e) {
-					// Ignore
+					LOGGER.debug("Exception :",e);
 				}
 			}
 		}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/JsonWrapper.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/JsonWrapper.java
index 10e52d1..dc87304 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/JsonWrapper.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/JsonWrapper.java
@@ -16,7 +16,7 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
-
+import org.openecomp.mso.logger.MsoLogger;
 //import org.codehaus.jackson.map.SerializationConfig.Feature;
 
 
@@ -29,6 +29,7 @@
 @JsonInclude(Include.NON_NULL)
 public abstract class JsonWrapper implements Serializable  {
 	
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 	@JsonInclude(Include.NON_NULL)
 	public String toJsonString(){
 		
@@ -54,7 +55,7 @@
 //		}
 		} catch (Exception e){
 
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return jsonString;
 	}
@@ -72,17 +73,13 @@
          try {
 			json = new JSONObject(mapper.writeValueAsString(this));
 		} catch (JsonGenerationException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JSONException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
          return json; 
 	}
@@ -95,14 +92,11 @@
 		try {
 			jsonString = mapper.writeValueAsString(list);
 		} catch (JsonGenerationException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return jsonString;
 	}
@@ -120,7 +114,7 @@
 			jsonString = ow.writeValueAsString(this);
 		} catch (Exception e){
 
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return jsonString;
 	}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/DecomposeJsonUtil.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/DecomposeJsonUtil.java
index 32c4776..738ec49 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/DecomposeJsonUtil.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/DecomposeJsonUtil.java
@@ -14,8 +14,10 @@
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 public class DecomposeJsonUtil implements Serializable {
-	
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 	/**
 	 * 
 	 */
@@ -40,14 +42,11 @@
 		try {
 			serviceDecomposition = om.readValue(jsonString, ServiceDecomposition.class);
 		} catch (JsonParseException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("JsonParseException :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("JsonMappingException :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("IOException :",e);
 		}
 		
 		return serviceDecomposition;
@@ -72,14 +71,11 @@
 		try {
 			vnfResource = om.readValue(jsonString, VnfResource.class);
 		} catch (JsonParseException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("JsonParseException :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("JsonMappingException :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("IOException :",e);
 		}
 		return vnfResource;
 	}
@@ -103,14 +99,11 @@
 		try {
 			networkResource = om.readValue(jsonString, NetworkResource.class);
 		} catch (JsonParseException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return networkResource;
 	}
@@ -134,14 +127,11 @@
 		try {
 			allottedResource = om.readValue(jsonString, AllottedResource.class);
 		} catch (JsonParseException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return allottedResource;
 	}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
index f7f6264..54a5732 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -67,7 +68,7 @@
 				return jsonObj.toString(MSOJsonIndentFactor);
 			}
 		} catch (Exception e){
-				msoLogger.debug("xml2json(): unable to parse xml and convert to json. Exception was: " + e.toString());
+				msoLogger.debug("xml2json(): unable to parse xml and convert to json. Exception was: " + e.toString(), e);
 				return null;
 		}
 	}
@@ -106,7 +107,7 @@
 				return toXMLString(jsonObj, null);
 			}
 		} catch (Exception e){
-				msoLogger.debug("json2xml(): unable to parse json and convert to xml. Exception was: " + e.toString());
+				msoLogger.debug("json2xml(): unable to parse json and convert to xml. Exception was: " + e.toString(), e);
 				return null;
 		}
 	}
@@ -264,7 +265,7 @@
 			JSONObject jsonObj = new JSONObject(jsonStr);
 			return jsonObj.toString(MSOJsonIndentFactor);
 		} catch (Exception e){
-			msoLogger.debug("prettyJson(): unable to parse/format json input. Exception was: " + e.toString());
+			msoLogger.debug("prettyJson(): unable to parse/format json input. Exception was: " + e.toString(), e);
 			return null;
 		}
 	}
@@ -334,7 +335,7 @@
 					}
 				}
 		} catch (Exception e) {
-				msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString(),e);
 		}
 		return null;
 	}
@@ -363,7 +364,7 @@
 					}
 				}
 		} catch (Exception e) {
-				msoLogger.debug("getJsonNodeValue(): unable to parse json to retrieve node for field=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonNodeValue(): unable to parse json to retrieve node for field=" + keys + ". Exception was: " + e.toString(), e);
 		}
 		return null;
 	}
@@ -395,7 +396,7 @@
 					}
 				}
 		} catch (Exception e) {
-				msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString(), e);
 		}
 		return 0;
 	}
@@ -424,7 +425,7 @@
 					}
 				}
 		} catch (Exception e) {
-				msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString(),e);
 		}
 		return false;
 	}
@@ -500,9 +501,9 @@
 			}
 		} catch (JSONException je) {
 				// JSONObject::get() throws this exception if one of the specified keys is not found
-				msoLogger.debug("getJsonParamValue(): caught JSONException attempting to retrieve param value for keys:" + keys + ", name=" + name);
+				msoLogger.debug("getJsonParamValue(): caught JSONException attempting to retrieve param value for keys:" + keys + ", name=" + name, je);
 		} catch (Exception e) {
-				msoLogger.debug("getJsonParamValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonParamValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString(), e);
 		}
 		return null;
 	}
@@ -523,7 +524,7 @@
 				return getJsonValueForKey(jsonObj, key);
 			}
 		} catch (Exception e) {
-				msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString(), e);
 		}
 		return null;
 	}
@@ -567,10 +568,10 @@
 			}
 		} catch (JSONException je) {
 				// JSONObject::get() throws this exception if one of the specified keys is not found
-				msoLogger.debug("getJsonValueForKey(): caught JSONException attempting to retrieve value for key=" + key);
+				msoLogger.debug("getJsonValueForKey(): caught JSONException attempting to retrieve value for key=" + key, je);
 				keyValue = null;
 		} catch (Exception e) {
-				msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString(), e);
 		}
 		return keyValue;
 	}
@@ -610,10 +611,10 @@
 			}
 		} catch (JSONException je) {
 				// JSONObject::get() throws this exception if one of the specified keys is not found
-				msoLogger.debug("getJsonValueForKey(): caught JSONException attempting to retrieve value for key=" + key);
+				msoLogger.debug("getJsonValueForKey(): caught JSONException attempting to retrieve value for key=" + key, je);
 				keyValue = null;
 		} catch (Exception e) {
-				msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString(),e);
 		}
 		return keyValue;
 	}
@@ -653,10 +654,10 @@
 			}
 		} catch (JSONException je) {
 				// JSONObject::get() throws this exception if one of the specified keys is not found
-				msoLogger.debug("getJsonBooleanValueForKey(): caught JSONException attempting to retrieve value for key=" + key);
+				msoLogger.debug("getJsonBooleanValueForKey(): caught JSONException attempting to retrieve value for key=" + key,je);
 				keyValue = null;
 		} catch (Exception e) {
-				msoLogger.debug("getJsonBooleanValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonBooleanValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString(),e);
 		}
 		return keyValue;
 	}
@@ -800,9 +801,9 @@
 
 		} catch (JSONException je) {
 				// JSONObject::get() throws this exception if one of the specified keys is not found
-				msoLogger.debug("getJsonRawValue(): caught JSONException attempting to retrieve raw value for key=" + keyStr);
+				msoLogger.debug("getJsonRawValue(): caught JSONException attempting to retrieve raw value for key=" + keyStr,je);
 		} catch (Exception e) {
-				msoLogger.debug("getJsonRawValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("getJsonRawValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString(),e);
 		}
 		return null;
 	}
@@ -842,10 +843,10 @@
 
 		} catch (JSONException je) {
 				// JSONObject::get() throws this exception if one of the specified keys is not found
-				msoLogger.debug("putJsonValue(): caught JSONException attempting to retrieve value for key=" + keyStr);
+				msoLogger.debug("putJsonValue(): caught JSONException attempting to retrieve value for key=" + keyStr,je);
 				return null;
 		} catch (Exception e) {
-				msoLogger.debug("putJsonValue(): unable to parse json to put value for key=" + keys + ". Exception was: " + e.toString());
+				msoLogger.debug("putJsonValue(): unable to parse json to put value for key=" + keys + ". Exception was: " + e.toString(),e);
 		}
 		return null;
 	}
@@ -961,7 +962,7 @@
 				return true;
 			}
 		} catch (Exception e) {
-				msoLogger.debug("jsonElementExist(): unable to determine if json element exist. Exception is: " + e.toString());
+				msoLogger.debug("jsonElementExist(): unable to determine if json element exist. Exception is: " + e.toString(),e);
 		}
 		return true;
 	}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonWrapper.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonWrapper.java
index 8898f27..ac514b9 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonWrapper.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonWrapper.java
@@ -15,12 +15,15 @@
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.SerializationFeature;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 @JsonInclude(Include.NON_NULL)
 public abstract class JsonWrapper implements Serializable  {
 	
 
 	private static final long serialVersionUID = 8633550139273639875L;
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 	@JsonInclude(Include.NON_NULL)
 	public String toJsonString(){
 		
@@ -45,7 +48,7 @@
 //		}
 		} catch (Exception e){
 
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return jsonString;
 	}
@@ -63,17 +66,13 @@
          try {
 			json = new JSONObject(mapper.writeValueAsString(this));
 		} catch (JsonGenerationException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JSONException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}		
          return json; 
 	}
@@ -86,14 +85,11 @@
 		try {
 			jsonString = mapper.writeValueAsString(list);
 		} catch (JsonGenerationException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (JsonMappingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return jsonString;
 	}
@@ -111,7 +107,7 @@
 			jsonString = ow.writeValueAsString(this);
 		} catch (Exception e){
 
-			e.printStackTrace();
+			LOGGER.debug("Exception :",e);
 		}
 		return jsonString;
 	}
diff --git a/bpmn/MSOMockServer/pom.xml b/bpmn/MSOMockServer/pom.xml
index 34f7a23..500535d 100644
--- a/bpmn/MSOMockServer/pom.xml
+++ b/bpmn/MSOMockServer/pom.xml
@@ -76,6 +76,11 @@
 			</exclusions>
 		</dependency>
 		<dependency>
+            <groupId>org.openecomp.so</groupId>
+            <artifactId>common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+		<dependency>
 			<groupId>javax.ws.rs</groupId>
 			<artifactId>javax.ws.rs-api</artifactId>
 			<version>2.0</version>
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterMockTransformer.java
index 33a65e6..1f17a8b 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterMockTransformer.java
@@ -2,7 +2,8 @@
  * ============LICENSE_START======================================================= 
  * ONAP - SO 
  * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -22,6 +23,7 @@
 
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
+import org.openecomp.mso.logger.MsoLogger;
 
 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 import com.github.tomakehurst.wiremock.common.FileSource;
@@ -29,6 +31,7 @@
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * 
  * Simulates SDNC Adapter Callback response
@@ -36,6 +39,7 @@
  */
 public class SDNCAdapterMockTransformer extends ResponseTransformer {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 	private String callbackResponse;
 	private String requestId;
 	
@@ -121,8 +125,7 @@
 				//Delay sending callback response
 				sleep(delay);
 			} catch (InterruptedException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :",e1);
 			}
 			System.out.println("Sending callback response:" + callbackUrl);
 			ClientRequest request = new ClientRequest(callbackUrl);
@@ -132,8 +135,7 @@
 				ClientResponse result = request.post();
 				//System.err.println("Successfully posted callback:" + result.getStatus());
 			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 		
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterNetworkTopologyMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterNetworkTopologyMockTransformer.java
index 673ac00..b782c05 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterNetworkTopologyMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/SDNCAdapterNetworkTopologyMockTransformer.java
@@ -2,7 +2,8 @@
  * ============LICENSE_START======================================================= 
  * ONAP - SO 
  * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved. 
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -29,8 +30,12 @@
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
 
+import org.openecomp.mso.logger.MsoLogger;
+
 public class SDNCAdapterNetworkTopologyMockTransformer extends ResponseTransformer {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+	
 	private String callbackResponse;
 	private String requestId;
 	
@@ -110,7 +115,7 @@
 				sleep(delay);
 			} catch (InterruptedException e1) {
 				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :",e1);
 			}
 			System.out.println("Sending callback response to url: " + callbackUrl);
 			ClientRequest request = new ClientRequest(callbackUrl);
@@ -122,7 +127,7 @@
 			} catch (Exception e) {
 				// TODO Auto-generated catch block
 				System.out.println("catch error in - request.post() ");
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 		
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterCreateMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterCreateMockTransformer.java
index 1e32077..ebedca8 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterCreateMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterCreateMockTransformer.java
@@ -6,6 +6,7 @@
  * ONAP - SO 
  * ================================================================================ 
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -27,6 +28,7 @@
 
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
+import org.openecomp.mso.logger.MsoLogger;
 
 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 import com.github.tomakehurst.wiremock.common.FileSource;
@@ -34,12 +36,15 @@
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * Please describe the VnfAdapterCreateMockTransformer.java class
  *
  */
 public class VnfAdapterCreateMockTransformer extends ResponseTransformer {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+	
 	private String notifyCallbackResponse;
 	private String ackResponse;
 
@@ -71,6 +76,7 @@
 			responseMessageId = ackResponse.substring(ackResponse.indexOf("<messageId>")+11, ackResponse.indexOf("</messageId>"));
 		    updatedResponse = ackResponse.replace(responseMessageId, messageId);
 		} catch (Exception ex) {
+			LOGGER.debug("Exception :",ex);
 			System.out.println(" ******* Use default response file in '__files/vnfAdapterMocks/vnfCreateSimResponse.xml'");
 		    responseMessageId = notifyCallbackResponse.substring(notifyCallbackResponse.indexOf("<messageId>")+11, notifyCallbackResponse.indexOf("</messageId>"));
 			updatedResponse = notifyCallbackResponse.replace(responseMessageId, messageId);
@@ -124,7 +130,7 @@
 				sleep(delay);
 			} catch (InterruptedException e1) {
 				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :",e1);
 			}
 			System.out.println("Sending callback response to url: " + callbackUrl);
 			ClientRequest request = new ClientRequest(callbackUrl);
@@ -138,7 +144,7 @@
 			} catch (Exception e) {
 				// TODO Auto-generated catch block
 				System.out.println("catch error in - request.post() ");
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterDeleteMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterDeleteMockTransformer.java
index 553aed6..b2c25fc 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterDeleteMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterDeleteMockTransformer.java
@@ -6,6 +6,7 @@
  * ONAP - SO 
  * ================================================================================ 
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -25,19 +26,20 @@
 
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
+import org.openecomp.mso.logger.MsoLogger;
 
 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 import com.github.tomakehurst.wiremock.common.FileSource;
 import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
-
 /**
  * Please describe the VnfAdapterCreateMockTransformer.java class
  *
  */
 public class VnfAdapterDeleteMockTransformer extends ResponseTransformer {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
 
 	private String notifyCallbackResponse;
 	private String ackResponse;
@@ -72,6 +74,7 @@
 			responseMessageId = ackResponse.substring(ackResponse.indexOf("<messageId>")+11, ackResponse.indexOf("</messageId>"));
 		    updatedResponse = ackResponse.replace(responseMessageId, messageId);
 		} catch (Exception ex) {
+			LOGGER.debug("Exception :",ex);
 			System.out.println(" ******* Use default response file in '__files/vnfAdapterMocks/vnfDeleteSimResponse.xml'");
 		    responseMessageId = notifyCallbackResponse.substring(notifyCallbackResponse.indexOf("<messageId>")+11, notifyCallbackResponse.indexOf("</messageId>"));
 			updatedResponse = notifyCallbackResponse.replace(responseMessageId, messageId);
@@ -125,7 +128,7 @@
 				sleep(delay);
 			} catch (InterruptedException e1) {
 				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :",e1);
 			}
 			System.out.println("Sending callback response to url: " + callbackUrl);
 			ClientRequest request = new ClientRequest(callbackUrl);
@@ -138,7 +141,7 @@
 			} catch (Exception e) {
 				// TODO Auto-generated catch block
 				System.out.println("catch error in - request.post() ");
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterQueryMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterQueryMockTransformer.java
index c1d27d5..5aae339 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterQueryMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterQueryMockTransformer.java
@@ -2,7 +2,8 @@
  * ============LICENSE_START======================================================= 
  * ONAP - SO 
  * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -25,6 +26,7 @@
 
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
+import org.openecomp.mso.logger.MsoLogger;
 
 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 import com.github.tomakehurst.wiremock.common.FileSource;
@@ -32,6 +34,7 @@
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * Please describe the VnfAdapterQueryMockTransformer.java class
  *
@@ -40,6 +43,8 @@
 
 public class VnfAdapterQueryMockTransformer extends ResponseTransformer{
 	
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+	
 	private String notifyCallbackResponse;
 	private String ackResponse;
 	private String messageId;
@@ -84,6 +89,7 @@
 			responseMessageId = ackResponse.substring(ackResponse.indexOf("<messageId>")+11, ackResponse.indexOf("</messageId>"));
 		    updatedResponse = ackResponse.replace(responseMessageId, messageId); 
 		} catch (Exception ex) {
+			LOGGER.debug("Exception :",ex);
 			System.out.println(" ******* Use default response file in '__files/vnfAdapterMocks/vnfQuerySimResponse.xml'");
 		    responseMessageId = notifyCallbackResponse.substring(notifyCallbackResponse.indexOf("<messageId>")+11, notifyCallbackResponse.indexOf("</messageId>"));
 			updatedResponse = notifyCallbackResponse.replace(responseMessageId, messageId);
@@ -139,8 +145,7 @@
 				//Delay sending callback response
 				sleep(delay);
 			} catch (InterruptedException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :",e1);
 			}
 			ClientRequest request = new ClientRequest(callbackUrl);
 			request.body("text/xml", payLoad);
@@ -149,8 +154,7 @@
 				ClientResponse result = request.post();
 				//System.err.println("Successfully posted callback:" + result.getStatus());
 			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterRollbackMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterRollbackMockTransformer.java
index 5207fa0..45a67de 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterRollbackMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterRollbackMockTransformer.java
@@ -5,7 +5,8 @@
  * ============LICENSE_START======================================================= 
  * ONAP - SO 
  * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -32,12 +33,15 @@
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * Please describe the VnfAdapterCreateMockTransformer.java class
  *
  */
 public class VnfAdapterRollbackMockTransformer extends ResponseTransformer {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+
 	private String notifyCallbackResponse;
 	private String ackResponse;
 	private String messageId;
@@ -74,6 +78,7 @@
 			responseMessageId = ackResponse.substring(ackResponse.indexOf("<messageId>")+11, ackResponse.indexOf("</messageId>"));
 		    updatedResponse = ackResponse.replace(responseMessageId, messageId); 
 		} catch (Exception ex) {
+			LOGGER.debug("Exception :",ex);
 			System.out.println(" ******* Use default response file in '__files/vnfAdapterMocks/vnfRollbackSimResponse.xml'");
 		    responseMessageId = notifyCallbackResponse.substring(notifyCallbackResponse.indexOf("<messageId>")+11, notifyCallbackResponse.indexOf("</messageId>"));
 			updatedResponse = notifyCallbackResponse.replace(responseMessageId, messageId);
@@ -125,8 +130,7 @@
 				//Delay sending callback response
 				sleep(delay);
 			} catch (InterruptedException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :",e1);
 			}
 			System.out.println("Sending callback response to url: " + callbackUrl);
 			ClientRequest request = new ClientRequest(callbackUrl);
@@ -137,9 +141,8 @@
 				System.out.println("Successfully posted callback? Status: " + result.getStatus());
 				//System.err.println("Successfully posted callback:" + result.getStatus());
 			} catch (Exception e) {
-				// TODO Auto-generated catch block
 				System.out.println("catch error in - request.post() ");				
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 
diff --git a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterUpdateMockTransformer.java b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterUpdateMockTransformer.java
index e84e57c..d67ffcd 100644
--- a/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterUpdateMockTransformer.java
+++ b/bpmn/MSOMockServer/src/main/java/org/openecomp/mso/bpmn/mock/VnfAdapterUpdateMockTransformer.java
@@ -5,7 +5,8 @@
  * ============LICENSE_START======================================================= 
  * ONAP - SO 
  * ================================================================================ 
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================ 
  * Licensed under the Apache License, Version 2.0 (the "License"); 
  * you may not use this file except in compliance with the License. 
@@ -25,6 +26,7 @@
 
 import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
+import org.openecomp.mso.logger.MsoLogger;
 
 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 import com.github.tomakehurst.wiremock.common.FileSource;
@@ -32,12 +34,15 @@
 import com.github.tomakehurst.wiremock.http.Request;
 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * Please describe the VnfAdapterUpdateMockTransformer.java class
  *
  */
 public class VnfAdapterUpdateMockTransformer extends ResponseTransformer {
 
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+	
 	private String notifyCallbackResponse;
 	private String requestId;
 	private String ackResponse;
@@ -74,6 +79,7 @@
 			responseMessageId = ackResponse.substring(ackResponse.indexOf("<messageId>")+11, ackResponse.indexOf("</messageId>"));
 		    updatedResponse = ackResponse.replace(responseMessageId, messageId); 
 		} catch (Exception ex) {
+			LOGGER.debug("Exception :",ex);
 			System.out.println(" ******* Use default response file in 'vnfAdapter/vnfUpdateSimResponse.xml'");
 		    responseMessageId = notifyCallbackResponse.substring(notifyCallbackResponse.indexOf("<messageId>")+11, notifyCallbackResponse.indexOf("</messageId>"));
 			updatedResponse = notifyCallbackResponse.replace(responseMessageId, messageId);
@@ -125,8 +131,7 @@
 				//Delay sending callback response
 				sleep(delay);
 			} catch (InterruptedException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
+				LOGGER.debug("Exception :", e1);
 			}
 			System.out.println("Sending callback response to url: " + callbackUrl);			
 			ClientRequest request = new ClientRequest(callbackUrl);
@@ -137,9 +142,8 @@
 				System.out.println("Successfully posted callback? Status: " + result.getStatus());				
 				//System.err.println("Successfully posted callback:" + result.getStatus());
 			} catch (Exception e) {
-				// TODO Auto-generated catch block
 				System.out.println("catch error in - request.post() ");
-				e.printStackTrace();
+				LOGGER.debug("Exception :",e);
 			}
 		}
 
diff --git a/bpmn/MSORESTClient/pom.xml b/bpmn/MSORESTClient/pom.xml
index b042a9e..1bcb3b7 100644
--- a/bpmn/MSORESTClient/pom.xml
+++ b/bpmn/MSORESTClient/pom.xml
@@ -35,6 +35,11 @@
 			<scope>test</scope>
 		</dependency>
 
+		<dependency>
+            <groupId>org.openecomp.so</groupId>
+            <artifactId>common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 		</dependencies>
 		<build>
 		<finalName>MSORESTClient</finalName>
diff --git a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java
index 259f3d4..6504615 100644
--- a/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java
+++ b/bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -54,6 +55,7 @@
 import org.apache.http.message.AbstractHttpMessage;
 import org.apache.http.util.EntityUtils;
 
+import org.openecomp.mso.logger.MsoLogger;
 /**
  * Client used to send RESTFul requests.
  * <p>
@@ -82,6 +84,8 @@
  * @since 1.0
  */
 public class RESTClient {
+	
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
     private final String proxyHost;
     private final int proxyPort;
 
@@ -166,8 +170,7 @@
                 }
             }
         } catch (UnsupportedEncodingException e) {
-            // should not occur
-            e.printStackTrace();
+            LOGGER.debug("Exception :", e);
         }
         return sb.toString();
     }
@@ -197,6 +200,7 @@
 			clientBuilder = HttpClientBuilder.create().setConnectionManager(
 					manager);
 		} catch (Exception ex) {
+			LOGGER.debug("Exception :", ex);
 			throw new RESTException(ex.getMessage());
 		}
 		clientBuilder.disableRedirectHandling();
diff --git a/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java b/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java
index d41f241..19115ce 100644
--- a/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java
+++ b/common/src/main/java/org/openecomp/mso/logger/MsoLogger.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/common/src/main/java/org/openecomp/mso/utils/UUIDChecker.java b/common/src/main/java/org/openecomp/mso/utils/UUIDChecker.java
index 1252333..b715717 100644
--- a/common/src/main/java/org/openecomp/mso/utils/UUIDChecker.java
+++ b/common/src/main/java/org/openecomp/mso/utils/UUIDChecker.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,8 @@
 /**
  */
 public class UUIDChecker {
+	
+	private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.GENERAL);
 
     private UUIDChecker() {
 
@@ -41,6 +44,7 @@
             UUID uuid = UUID.fromString(id);
             return uuid.toString().equalsIgnoreCase(id);
         } catch (IllegalArgumentException iae) {
+        	LOGGER.debug("IllegalArgumentException", iae);
             return false;
         }
     }
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ManualTasks.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ManualTasks.java
index acdae29..f3273cf 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ManualTasks.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ManualTasks.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -190,7 +191,7 @@
 				completeResp = mapper.writeValueAsString(trr);
 			}
 			catch (Exception e) {
-				msoLogger.debug("Unable to format response");
+				msoLogger.debug("Unable to format response",e);
 				Response resp = msoRequest.buildServiceErrorResponse(bpelStatus,
 						MsoException.ServiceException,
 						"Request Failed due to bad response format" ,
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java
index e7a2334..eab232d 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/MsoRequest.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -215,7 +216,7 @@
         	requestJSON = mapper.writeValueAsString(sir.getRequestDetails());
 
         } catch(Exception e){
-        	throw new ValidationException ("Parse ServiceInstanceRequest to JSON string");
+        	throw new ValidationException ("Parse ServiceInstanceRequest to JSON string",e);
         }
 
         if(instanceIdMap != null){
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java
index a176f69..26fdba4 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/OrchestrationRequests.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -343,7 +344,7 @@
        	requestDetails = mapper.readValue(requestBody, RequestDetails.class);
 
        }catch(Exception e){
-       	msoLogger.debug("Exception caught mapping requestBody to RequestDetails");
+       	msoLogger.debug("Exception caught mapping requestBody to RequestDetails",e);
        }
 
        request.setRequestDetails(requestDetails);
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
index a196cc0..e32f153 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/ServiceInstances.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -649,7 +650,7 @@
 			msoRequest.updateFinalStatus (Status.FAILED);
 			msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
 			msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine");
-			msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ());
+			msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity (),e);
 			return resp;
 		}
 
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/TasksHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/TasksHandler.java
index b191a3d..1e8bea0 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/TasksHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/TasksHandler.java
@@ -164,7 +164,7 @@
 			msoRequest.updateFinalStatus (Status.FAILED);
 			msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
 			msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine");
-			msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ());
+			msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity (),e);
 			return resp;
 		}
 		TasksGetResponse trr = new TasksGetResponse();
@@ -206,7 +206,7 @@
 						
 						msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
 						msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine");
-						msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ());
+						msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity (),e);
 						return resp;
 					}
 					taskList.add(taskListEntry);				
@@ -235,7 +235,7 @@
 			jsonResponse = mapper.writeValueAsString(trr);
 		}
 		catch (Exception e) {
-			msoLogger.debug("Unable to format response");
+			msoLogger.debug("Unable to format response",e);
 			Response resp = msoRequest.buildServiceErrorResponse(500,
 					MsoException.ServiceException,
 					"Request Failed due to bad response format" ,
diff --git a/mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/CatalogDatabase.java b/mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/CatalogDatabase.java
index de46fd9..20450ca 100644
--- a/mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/CatalogDatabase.java
+++ b/mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/CatalogDatabase.java
@@ -3,6 +3,7 @@
  * ONAP - SO
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -329,7 +330,7 @@
         try {
         	environment = (HeatEnvironment) query.uniqueResult ();
         } catch (org.hibernate.NonUniqueResultException nure) {
-        	LOGGER.debug("Non Unique Result Exception - the Catalog Database does not match a unique row for Envt - data integrity error: artifactUuid='" + artifactUuid +"'");
+        	LOGGER.debug("Non Unique Result Exception - the Catalog Database does not match a unique row for Envt - data integrity error: artifactUuid='" + artifactUuid +"'", nure);
         	LOGGER.error(MessageEnum.GENERAL_EXCEPTION, " non unique result for heatEnvironment artifactUuid=" + artifactUuid, "", "", MsoLogger.ErrorCode.DataError, "Non unique result for artifactUuid==" + artifactUuid);
         	environment = null;
         } catch (org.hibernate.HibernateException he) {
@@ -554,7 +555,7 @@
         try {
             result = (Service) query.uniqueResult();
         } catch (org.hibernate.NonUniqueResultException nure) {
-            LOGGER.debug("Non Unique Result Exception - the Catalog Database does not match a unique row - data integrity error: modelInvariantId='" + modelInvariantId + "', modelVersion='" + modelVersion + "'");
+            LOGGER.debug("Non Unique Result Exception - the Catalog Database does not match a unique row - data integrity error: modelInvariantId='" + modelInvariantId + "', modelVersion='" + modelVersion + "'", nure);
             LOGGER.error(MessageEnum.GENERAL_EXCEPTION, " non unique result for modelInvariantId=" + modelInvariantId + " and modelVersion=" + modelVersion, "", "", MsoLogger.ErrorCode.DataError, "Non unique result for modelInvariantId=" + modelInvariantId);
             throw new Exception("Non Unique Result Exception - the Catalog Database does not match a unique row - data integrity error: modelInvariantId='" + modelInvariantId + "', modelVersion='" + modelVersion + "'");
         }
@@ -3537,8 +3538,7 @@
                     	//session.merge(heat);
                     	session.save(heat);
                     } catch (HibernateException he1) {
-                    	LOGGER.debug("Hibernate Exception encountered on first attempt at save(heat) - try again..." + he1.getMessage());
-                    	LOGGER.debug(he1.getStackTrace().toString());
+                    	LOGGER.debug("Hibernate Exception encountered on first attempt at save(heat) - try again..." + he1.getMessage(), he1);
                     	try {
                     		Session session = this.getSession();
                     		//session.merge(heat);
@@ -3548,24 +3548,24 @@
                     		LOGGER.debug(he2.getStackTrace().toString());
                     		throw he2;
                     	} catch (Exception e2) {
-                    		LOGGER.debug("General Exception encountered on second attempt at save(heat)..." + e2.getMessage());
+                    		LOGGER.debug("General Exception encountered on second attempt at save(heat)..." + e2.getMessage(),e2);
                     		LOGGER.debug(e2.getStackTrace().toString());
                     		throw e2;
                     	}
                     	
                     } catch (Exception e1) {
-                    	LOGGER.debug("General Exception encountered on first attempt at save(heat) - try again..." + e1.getMessage());
+                    	LOGGER.debug("General Exception encountered on first attempt at save(heat) - try again..." + e1.getMessage(), e1);
                     	LOGGER.debug(e1.getStackTrace().toString());
                     	try {
                     		Session session = this.getSession();
                     		//session.merge(heat);
                     		session.save(heat);
                     	} catch (HibernateException he2) {
-                    		LOGGER.debug("General Exception encountered on second attempt at save(heat)" + he2.getMessage());
+                    		LOGGER.debug("General Exception encountered on second attempt at save(heat)" + he2.getMessage(), he2);
                     		LOGGER.debug(he2.getStackTrace().toString());
                     		throw he2;
                     	} catch (Exception e2) {
-                    		LOGGER.debug("General Exception encountered on second attempt at save(heat)..." + e2.getMessage());
+                    		LOGGER.debug("General Exception encountered on second attempt at save(heat)..." + e2.getMessage(), e2);
                     		LOGGER.debug(e2.getStackTrace().toString());
                     		throw e2;
                     	}
@@ -3607,15 +3607,15 @@
         try {
         	env = (HeatEnvironment) query.uniqueResult ();
         } catch (org.hibernate.NonUniqueResultException nure) {
-        	LOGGER.debug("Non Unique Result Exception - the Catalog Database does not match a unique row - data integrity error: envName='" + name + "', version='" + version + "' and asdcResourceName=" + asdcResourceName);
+        	LOGGER.debug("Non Unique Result Exception - the Catalog Database does not match a unique row - data integrity error: envName='" + name + "', version='" + version + "' and asdcResourceName=" + asdcResourceName, nure);
         	LOGGER.error(MessageEnum.GENERAL_EXCEPTION, " non unique result for envName=" + name + " and version=" + version + " and asdcResourceName=" + asdcResourceName, "", "", MsoLogger.ErrorCode.DataError, "non unique result for envName=" + name);
         	env = null;
         } catch (org.hibernate.HibernateException he) {
-        	LOGGER.debug("Hibernate Exception - while searching for: envName='" + name + "', asdc_service_model_version='" + version + "' and asdcResourceName=" + asdcResourceName);
+        	LOGGER.debug("Hibernate Exception - while searching for: envName='" + name + "', asdc_service_model_version='" + version + "' and asdcResourceName=" + asdcResourceName, he);
         	LOGGER.error(MessageEnum.GENERAL_EXCEPTION, " Hibernate exception searching for envName=" + name + " and version=" + version + " and asdcResourceName=" + asdcResourceName, "", "", MsoLogger.ErrorCode.DataError, "Hibernate exception searching for envName=" + name);
         	env = null;
         } catch (Exception e) {
-        	LOGGER.debug("Generic Exception - while searching for: envName='" + name + "', asdc_service_model_version='" + version + "' and asdcResourceName=" + asdcResourceName);
+        	LOGGER.debug("Generic Exception - while searching for: envName='" + name + "', asdc_service_model_version='" + version + "' and asdcResourceName=" + asdcResourceName, e);
         	LOGGER.error(MessageEnum.GENERAL_EXCEPTION, " Generic exception searching for envName=" + name + " and version=" + version + " and asdcResourceName=" + asdcResourceName, "", "", MsoLogger.ErrorCode.DataError, "Generic exception searching for envName=" + name);
         	env = null;
         }
@@ -3767,7 +3767,7 @@
         try {
         	LOGGER.debug(vnfResourceCustomization.toString());
         } catch (Exception e) {
-        	LOGGER.debug("Unable to print VRC " + e.getMessage());
+        	LOGGER.debug("Unable to print VRC " + e.getMessage(), e);
         }
         try {
         		 // Check if NetworkResourceCustomzation record already exists.  If so, skip saving it.
@@ -3789,7 +3789,7 @@
         		try {
         			LOGGER.debug("Existing VRC entry found\n" + existing.toString());
         		} catch (Exception e) {
-        			LOGGER.debug("Unable to print VRC2 " + e.getMessage());
+        			LOGGER.debug("Unable to print VRC2 " + e.getMessage(), e);
         		}
         		return false;
             	}
@@ -4074,7 +4074,7 @@
         	LOGGER.debug("heat template id = " + vfModule.getHeatTemplateArtifactUUId() + ", vol template id = "+ vfModule.getVolHeatTemplateArtifactUUId());
         	LOGGER.debug(vfModule.toString());
         } catch (Exception e) {
-        	LOGGER.debug("unable to print vfmodule " + e.getMessage());
+        	LOGGER.debug("unable to print vfmodule " + e.getMessage(), e);
         }
         try {
         	VfModule existing = this.getVfModuleByModelUUID(vfModule.getModelUUID());
@@ -4087,7 +4087,7 @@
         		try {
         			LOGGER.debug("Found an existing vf module!\n" + existing.toString());
         		} catch (Exception e) {
-        			LOGGER.debug("unable to print vfmodule2 " + e.getMessage());
+        			LOGGER.debug("unable to print vfmodule2 " + e.getMessage(), e);
             }
         	}
         	
@@ -4137,7 +4137,7 @@
         	LOGGER.debug("env id = " + vfModuleCustomization.getHeatEnvironmentArtifactUuid() + ", vol Env=" + vfModuleCustomization.getVolEnvironmentArtifactUuid());
         	LOGGER.debug(vfModuleCustomization.toString());
         } catch (Exception e) {
-        	LOGGER.debug("unable to print vfmodulecust " + e.getMessage());
+        	LOGGER.debug("unable to print vfmodulecust " + e.getMessage(), e);
         }
         try {
         	VfModuleCustomization existing = this.getVfModuleCustomizationByModelCustomizationId(vfModuleCustomization.getModelCustomizationUuid());
@@ -4148,7 +4148,7 @@
         		try {
         			LOGGER.debug("Found an existing vf module customization entry\n" + existing.toString());
         		} catch (Exception e) {
-        			LOGGER.debug("unable to print vfmodulecust2 " + e.getMessage());
+        			LOGGER.debug("unable to print vfmodulecust2 " + e.getMessage(), e);
             	}
         	}
       
@@ -4420,7 +4420,7 @@
             
             return resultList.get (0);
         } catch (Exception e) {
-        	LOGGER.debug("Error trying to find Network Resource with " + modelUUID +", " + e.getMessage());
+        	LOGGER.debug("Error trying to find Network Resource with " + modelUUID +", " + e.getMessage(),e);
         } finally {
             LOGGER.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "getNetworkResourceByModelUuid", null);
         }
@@ -4544,7 +4544,7 @@
 
             return resultList.get (0);
         } catch (Exception e) {
-        	LOGGER.debug("Error trying to find Network Resource with " + modelCustomizationUuid +", " + e.getMessage());
+        	LOGGER.debug("Error trying to find Network Resource with " + modelCustomizationUuid +", " + e.getMessage(),e);
         } finally {
             LOGGER.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "getNetworkResourceByModelCustUuid", null);
         }
@@ -5062,7 +5062,7 @@
         	try {
         		LOGGER.debug("Returning theObjects:" + theObjects.size());
         	} catch (Exception e) {
-        		LOGGER.debug("Returning theObjects");
+        		LOGGER.debug("Returning theObjects",e);
         	}
         	LOGGER.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "executeQuerySingleRow", null);
         }
