MENDELU/Reduce warn logs noise - 404 dedicated logger#1278
Open
milanmajchrak wants to merge 1 commit intocustomer/mendelufrom
Open
MENDELU/Reduce warn logs noise - 404 dedicated logger#1278milanmajchrak wants to merge 1 commit intocustomer/mendelufrom
milanmajchrak wants to merge 1 commit intocustomer/mendelufrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR aims to reduce REST API 404 warning noise by routing NOT_FOUND client errors through a dedicated Log4j2 logger which is OFF by default, while also refactoring parts of the exception logging logic in DSpaceApiExceptionControllerAdvice.
Changes:
- Add a dedicated Log4j2 logger for 404 NOT_FOUND responses (OFF by default).
- Refactor status-code-to-log-level handling into helper methods (
getStatusCodesLoggedAsErrors(),logClientError()). - Introduce
sendErrorResponseFromException()helper intended for exposing exception messages in 4xx responses.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| dspace/config/log4j2.xml | Adds a dedicated logger entry for 404 NOT_FOUND responses (OFF by default). |
| dspace-server-webapp/src/main/java/org/dspace/app/rest/exception/DSpaceApiExceptionControllerAdvice.java | Adds dedicated 404 logger usage and refactors client-error logging / status-code parsing into helpers. |
You can also share your feedback on Copilot code review. Take the survey.
Comment on lines
249
to
285
| * Send the error to the response. The error message is taken from exception message. | ||
| * This method is mainly appropriate for 4xx errors, | ||
| * where the exception message should be exposed to REST API clients in response body. | ||
| * This method also logs the ERROR log, containing the first line from the exception stack trace. | ||
| * Specific errors where an ERROR log with full stack trace is more appropriate are configured | ||
| * using property {@code logging.server.include-stacktrace-for-httpcode} | ||
| * (see {@link DSpaceApiExceptionControllerAdvice#P_LOG_AS_ERROR} | ||
| * and {@link DSpaceApiExceptionControllerAdvice#LOG_AS_ERROR_DEFAULT}). | ||
| * | ||
| * @param request current request | ||
| * @param response current response | ||
| * @param ex Exception causing the error response | ||
| * @param statusCode status code to send in response | ||
| */ | ||
| private void sendErrorResponseFromException(final HttpServletRequest request, | ||
| final HttpServletResponse response, | ||
| final Exception ex, | ||
| final int statusCode) | ||
| throws IOException { | ||
| //Make sure Spring picks up this exception | ||
| request.setAttribute(EXCEPTION_ATTRIBUTE, ex); | ||
|
|
||
| final Set<Integer> statusCodesLoggedAsErrors = getStatusCodesLoggedAsErrors(); | ||
|
|
||
| String message = ex.getMessage(); | ||
| if (statusCodesLoggedAsErrors.contains(statusCode)) { | ||
| log.error("{} (status:{})", message, statusCode, ex); | ||
| } else { | ||
| StackTraceElement[] trace = ex.getStackTrace(); | ||
| String location = trace.length <= 0 ? "unknown" : trace[0].toString(); | ||
| logClientError(statusCode, message, ex.getClass().getName(), location); | ||
| } | ||
|
|
||
| response.sendError(statusCode, message); | ||
| } | ||
|
|
||
| /** |
Comment on lines
+249
to
+253
| * Send the error to the response. The error message is taken from exception message. | ||
| * This method is mainly appropriate for 4xx errors, | ||
| * where the exception message should be exposed to REST API clients in response body. | ||
| * This method also logs the ERROR log, containing the first line from the exception stack trace. | ||
| * Specific errors where an ERROR log with full stack trace is more appropriate are configured |
Comment on lines
+64
to
+70
| /** | ||
| * 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"); |
Comment on lines
+353
to
+355
| String[] error_codes = configurationService.getArrayProperty( | ||
| P_LOG_AS_ERROR, LOG_AS_ERROR_DEFAULT); | ||
| for (String code : error_codes) { |
dspace/config/log4j2.xml
Outdated
Comment on lines
+91
to
+96
| <!-- 404 NOT_FOUND responses. Set to WARN to see 404s in logs. --> | ||
| <Logger name='org.dspace.app.rest.exception.DSpaceApiExceptionControllerAdvice.NotFound' | ||
| level='OFF' | ||
| additivity='false'> | ||
| <AppenderRef ref='A1'/> | ||
| </Logger> |
33ea0e7 to
4afe794
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cherry-pick of commits 1dc5339 and db67645 into customer/mendelu.
Problem description
Original commits: