Juan Hernandez has uploaded a new change for review. Change subject: restapi: Improve logging of exceptions ......................................................................
restapi: Improve logging of exceptions Currently when an exception is detected while rendering an document the details are swallowed by the REST framework and lost. This complicates debugging. To avoid that this patch changes the exception handler so that it will send the details of the exception to the log. Change-Id: I8085ae6d09ab49f1706b6c38d5b3e79b712f0241 Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com> --- M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/IOExceptionMapper.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/JsonExceptionMapper.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MalformedIdExceptionMapper.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MappingExceptionMapper.java 4 files changed, 52 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/37550/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/IOExceptionMapper.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/IOExceptionMapper.java index d282864..f3a8b60 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/IOExceptionMapper.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/IOExceptionMapper.java @@ -30,12 +30,15 @@ import org.ovirt.engine.api.model.Fault; import org.ovirt.engine.api.model.UsageMessage; import org.ovirt.engine.api.utils.InvalidValueException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This mapper is intended to handle the exceptions thrown by the JAXB message body reader. */ @Provider public class IOExceptionMapper implements ExceptionMapper<IOException> { + private static final Logger log = LoggerFactory.getLogger(IOExceptionMapper.class); @Context protected UriInfo uriInfo; @@ -58,6 +61,12 @@ // For any other kind of exception generate an error response with information describing the correct syntax for // the request: try { + log.error( + "IO exception while processing \"{}\" request for path \"{}\"", + request.getMethod(), + uriInfo.getPath() + ); + log.error("Exception", exception); UsageFinder finder = new UsageFinder(); UsageMessage usage = finder.getUsageMessage(application, uriInfo, request); return Response.status(Status.BAD_REQUEST).entity(usage).build(); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/JsonExceptionMapper.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/JsonExceptionMapper.java index a226e63..4195a74 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/JsonExceptionMapper.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/JsonExceptionMapper.java @@ -27,20 +27,31 @@ import javax.ws.rs.ext.Provider; import org.codehaus.jackson.JsonProcessingException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Provider public class JsonExceptionMapper implements ExceptionMapper<JsonProcessingException> { + private static final Logger log = LoggerFactory.getLogger(JsonExceptionMapper.class); @Context protected UriInfo uriInfo; + @Context protected Request request; + @Context protected Application application; @Override public Response toResponse(JsonProcessingException exception) { try { + log.error( + "JSON exception while processing \"{}\" request for path \"{}\"", + request.getMethod(), + uriInfo.getPath() + ); + log.error("Exception", exception); return Response.status(Status.BAD_REQUEST) .entity(new UsageFinder().getUsageMessage(application, uriInfo, request)) .build(); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MalformedIdExceptionMapper.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MalformedIdExceptionMapper.java index 780fc2b..3e63ce9 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MalformedIdExceptionMapper.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MalformedIdExceptionMapper.java @@ -16,18 +16,36 @@ package org.ovirt.engine.api.restapi.resource.validation; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; import org.ovirt.engine.api.restapi.utils.MalformedIdException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Provider public class MalformedIdExceptionMapper implements ExceptionMapper<MalformedIdException> { + private static final Logger log = LoggerFactory.getLogger(MalformedIdExceptionMapper.class); + + @Context + protected UriInfo uriInfo; + + @Context + protected Request request; @Override public Response toResponse(MalformedIdException exception) { + log.error( + "Malformed id detected while processing \"{}\" request for \"{}\"", + request.getMethod(), + uriInfo.getPath() + ); + log.error("Exception", exception); return Response.status(Status.BAD_REQUEST).entity(exception.getCause().getMessage()).build(); } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MappingExceptionMapper.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MappingExceptionMapper.java index 10b600e..762ce4c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MappingExceptionMapper.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/MappingExceptionMapper.java @@ -16,7 +16,10 @@ package org.ovirt.engine.api.restapi.resource.validation; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.ExceptionMapper; import javax.ws.rs.ext.Provider; @@ -27,11 +30,21 @@ @Provider public class MappingExceptionMapper implements ExceptionMapper<MappingException> { - private static final Logger log = LoggerFactory.getLogger(MappingExceptionMapper.class); + + @Context + protected UriInfo uriInfo; + + @Context + protected Request request; @Override public Response toResponse(MappingException exception) { + log.error( + "Mapping exception while processing \"{}\" request for path \"{}\"", + request.getMethod(), + uriInfo.getPath() + ); log.error("Exception", exception); final Fault fault = new Fault(); -- To view, visit http://gerrit.ovirt.org/37550 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8085ae6d09ab49f1706b6c38d5b3e79b712f0241 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches