diff --git a/utils/misc/src/main/java/org/onlab/util/Tools.java b/utils/misc/src/main/java/org/onlab/util/Tools.java
index 596e34b..2dd43a0 100644
--- a/utils/misc/src/main/java/org/onlab/util/Tools.java
+++ b/utils/misc/src/main/java/org/onlab/util/Tools.java
@@ -188,6 +188,7 @@
      */
     public static <T> T nullIsNotFound(T item, String message) {
         if (item == null) {
+            log.error(message);
             throw new ItemNotFoundException(message);
         }
         return item;
@@ -205,6 +206,7 @@
      */
     public static <T> Set<T> emptyIsNotFound(Set<T> item, String message) {
         if (item == null || item.isEmpty()) {
+            log.error(message);
             throw new ItemNotFoundException(message);
         }
         return item;
@@ -222,6 +224,7 @@
      */
     public static <T> T nullIsIllegal(T item, String message) {
         if (item == null) {
+            log.error(message);
             throw new IllegalArgumentException(message);
         }
         return item;
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
index b2ee977..3787113 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ApplicationsWebResource.java
@@ -39,7 +39,9 @@
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Set;
+import org.slf4j.Logger;
 
+import static org.slf4j.LoggerFactory.getLogger;
 import static org.onlab.util.Tools.nullIsNotFound;
 import static org.onlab.util.Tools.readTreeFromStream;
 
@@ -49,6 +51,9 @@
 @Path("applications")
 public class ApplicationsWebResource extends AbstractWebResource {
 
+    private static final Logger log = getLogger(ApplicationsWebResource.class);
+
+
     private static final String APP_ID_NOT_FOUND = "Application ID is not found";
     private static final String APP_NOT_FOUND = "Application is not found";
     private static final String APP_READY = "ready";
@@ -83,7 +88,7 @@
     @Path("{name}")
     public Response getApp(@PathParam("name") String name) {
         ApplicationAdminService service = get(ApplicationAdminService.class);
-        ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND);
+        ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND + ":" + name);
         return response(service, appId);
     }
 
@@ -97,10 +102,14 @@
     @Path("{name}/health")
     public Response health(@PathParam("name") String name) {
         ApplicationAdminService service = get(ApplicationAdminService.class);
-        ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND);
+        ApplicationId appId = service.getId(name);
+        nullIsNotFound(appId, APP_ID_NOT_FOUND + ": " + name);
+
+        Application app = service.getApplication(appId);
+        nullIsNotFound(app, APP_NOT_FOUND + ": " + appId);
 
         ComponentsMonitorService componentsMonitorService = get(ComponentsMonitorService.class);
-        boolean ready = componentsMonitorService.isFullyStarted(service.getApplication(appId).features());
+        boolean ready = componentsMonitorService.isFullyStarted(app.features());
         return Response.ok(mapper().createObjectNode().put("message", ready ? APP_READY : APP_PENDING)).build();
     }
 
@@ -193,7 +202,7 @@
     @Path("{name}/active")
     public Response activateApp(@PathParam("name") String name) {
         ApplicationAdminService service = get(ApplicationAdminService.class);
-        ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND);
+        ApplicationId appId = nullIsNotFound(service.getId(name), APP_NOT_FOUND + ": " + name);
         service.activate(appId);
         return response(service, appId);
     }
@@ -245,7 +254,7 @@
     @Path("{name}/bits")
     public Response getAppBits(@PathParam("name") String name) {
         ApplicationAdminService service = get(ApplicationAdminService.class);
-        ApplicationId appId = nullIsNotFound(service.getId(name), APP_ID_NOT_FOUND);
+        ApplicationId appId = nullIsNotFound(service.getId(name), APP_ID_NOT_FOUND + ": " + name);
         InputStream bits = service.getApplicationArchive(appId);
         return ok(bits).build();
     }
@@ -290,12 +299,13 @@
     }
 
     private Response response(ApplicationAdminService service, ApplicationId appId) {
-        Application app = nullIsNotFound(service.getApplication(appId), APP_NOT_FOUND);
+        Application app = nullIsNotFound(service.getApplication(appId),
+                                         APP_NOT_FOUND + ": " + appId);
         return ok(codec(Application.class).encode(app, this)).build();
     }
 
     private Response response(ApplicationId appId) {
-        ApplicationId checkedAppId = nullIsNotFound(appId, APP_ID_NOT_FOUND);
+        ApplicationId checkedAppId = nullIsNotFound(appId, APP_ID_NOT_FOUND + ": " + appId);
         return ok(codec(ApplicationId.class).encode(checkedAppId, this)).build();
     }
 }
