diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
index 6d27da8..c6776c7 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
@@ -95,6 +95,9 @@
 
     private static final String SECURITY_GROUP_FLAG_REQUIRED = "Security Group flag is not specified";
 
+    private static final String AUTH_INFO_NOT_FOUND = "Auth info is not found";
+    private static final String AUTH_INFO_NOT_CORRECT = "Auth info is not correct";
+
     private static final String HTTP_HEADER_ACCEPT = "accept";
     private static final String HTTP_HEADER_VALUE_JSON = "application/json";
 
@@ -132,13 +135,15 @@
 
         Optional<OpenstackNode> node = osNodeAdminService.nodes(CONTROLLER).stream().findFirst();
         if (!node.isPresent()) {
-            throw new ItemNotFoundException("Auth info is not found");
+            log.error(AUTH_INFO_NOT_FOUND);
+            throw new ItemNotFoundException(AUTH_INFO_NOT_FOUND);
         }
 
         OSClient osClient = OpenstackNetworkingUtil.getConnectedClient(node.get());
 
         if (osClient == null) {
-            throw new ItemNotFoundException("Auth info is not correct");
+            log.error(AUTH_INFO_NOT_CORRECT);
+            throw new ItemNotFoundException(AUTH_INFO_NOT_CORRECT);
         }
 
         try {
@@ -407,6 +412,8 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response updateActiveStatus(@PathParam("flag") String flag) {
 
+        log.info("Update active status to {}", flag);
+
         if (FLAG_TRUE.equalsIgnoreCase(flag)) {
             osHaService.setActive(true);
         }
@@ -443,6 +450,8 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response updateActiveIp(@PathParam("ip") String ip) {
 
+        log.info("Update active IP address to {}", ip);
+
         osHaService.setActiveIp(IpAddress.valueOf(ip));
 
         return status(Response.Status.OK).build();
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
index e766ab6..dd9ac56 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
@@ -94,7 +94,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     public Response createNodes(InputStream input) {
-        log.trace(String.format(MESSAGE_NODE, CREATE));
+        log.info(String.format(MESSAGE_NODE, CREATE));
 
         readNodeConfiguration(input).forEach(osNode -> {
             OpenstackNode existing = osNodeService.node(osNode.hostname());
@@ -122,7 +122,7 @@
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     public Response updateNodes(InputStream input) {
-        log.trace(String.format(MESSAGE_NODE, UPDATE));
+        log.info(String.format(MESSAGE_NODE, UPDATE));
 
         Set<OpenstackNode> nodes = readNodeConfiguration(input);
         for (OpenstackNode osNode: nodes) {
@@ -151,7 +151,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{hostname}")
     public Response deleteNodes(@PathParam("hostname") String hostname) {
-        log.trace(String.format(MESSAGE_NODE, DELETE));
+        log.info(String.format(MESSAGE_NODE, DELETE));
 
         OpenstackNode existing =
                 osNodeService.node(nullIsIllegal(hostname, HOST_NAME + ERROR_MESSAGE));
@@ -213,7 +213,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("init/node/{hostname}")
     public Response initNode(@PathParam("hostname") String hostname) {
-        log.trace(String.format(MESSAGE_NODE, QUERY));
+        log.info(String.format(MESSAGE_NODE, INIT));
 
         OpenstackNode osNode = osNodeService.node(hostname);
         if (osNode == null) {
@@ -234,7 +234,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("init/all")
     public Response initAllNodes() {
-        log.trace(String.format(MESSAGE_NODE, QUERY));
+        log.info(String.format(MESSAGE_NODE, INIT));
 
         osNodeService.nodes()
                 .forEach(n -> {
@@ -254,7 +254,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("init/incomplete")
     public Response initIncompleteNodes() {
-        log.trace(String.format(MESSAGE_NODE, QUERY));
+        log.info(String.format(MESSAGE_NODE, INIT));
 
         osNodeService.nodes().stream()
                 .filter(n -> n.state() != COMPLETE)
