diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java
index 8640f64a7f8d..6f305a6ce86f 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java
@@ -61,6 +61,14 @@
public class DSpaceApiExceptionControllerAdvice extends ResponseEntityExceptionHandler {
private static final Logger log = LogManager.getLogger();
+ /**
+ * Dedicated logger for 404 NOT_FOUND responses. Configured at OFF level by default
+ * so that expected 404s don't flood production logs.
+ * Set to WARN in log4j2.xml to see 404 responses in logs.
+ */
+ private static final Logger notFoundLog =
+ LogManager.getLogger("org.dspace.app.rest.exception.DSpaceApiExceptionControllerAdvice.NotFound");
+
/**
* Default collection of HTTP error codes to log as ERROR with full stack trace.
*/
@@ -290,7 +298,6 @@ private void sendErrorResponse(final HttpServletRequest request,
// Log the full error and status code
log.error("{} (status:{})", message, statusCode, ex);
} else if (HttpStatus.valueOf(statusCode).is4xxClientError()) {
- // Log the error as a single-line WARN
String location;
String exceptionMessage;
if (null == ex) {
@@ -301,12 +308,26 @@ private void sendErrorResponse(final HttpServletRequest request,
StackTraceElement[] trace = ex.getStackTrace();
location = trace.length <= 0 ? "unknown" : trace[0].toString();
}
- log.warn("{} (status:{} exception: {} at: {})", message, statusCode,
- exceptionMessage, location);
+ logClientError(statusCode, message, exceptionMessage, location);
}
//Exception properties will be set by org.springframework.boot.web.support.ErrorPageFilter
response.sendError(statusCode, message);
}
+ /**
+ * Log a 4xx client error. 404 NOT_FOUND is sent to a dedicated logger ({@link #notFoundLog})
+ * at WARN level, but the logger is set to OFF by default in log4j2.xml (suppressed).
+ * Set logger to WARN in log4j2.xml to see 404 responses in logs.
+ */
+ private void logClientError(int statusCode, String message, String exceptionMessage, String location) {
+ if (statusCode == HttpServletResponse.SC_NOT_FOUND) {
+ notFoundLog.warn("{} (status:{} exception: {} at: {})", message, statusCode,
+ exceptionMessage, location);
+ } else {
+ log.warn("{} (status:{} exception: {} at: {})", message, statusCode,
+ exceptionMessage, location);
+ }
+ }
+
}
diff --git a/dspace/config/log4j2.xml b/dspace/config/log4j2.xml
index ea262904fd97..4faf0b68b305 100644
--- a/dspace/config/log4j2.xml
+++ b/dspace/config/log4j2.xml
@@ -95,6 +95,13 @@
+
+
+
+
+