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 d18fc860f64b..a02090200ddb 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.
*/
@@ -300,12 +308,25 @@ 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,
//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 2b72fbe1c574..b15085af6e65 100644
--- a/dspace/config/log4j2.xml
+++ b/dspace/config/log4j2.xml
@@ -66,6 +66,13 @@
+
+
+
+
+