Мы запускаем DropWizard и пытаемся включить регистрацию URL-адресов, которые вызывают 404 ответа
У нас есть универсальный сопоставитель исключений, который получает NotFoundException
.К сожалению, это исключение не содержит контекста того, какой URL-адрес вызвал его создание.
Пример приложения здесь: https://github.com/pauldambra/not.found.example
Мы используем ExceptionMapper
public class NotFoundLogger implements ExceptionMapper<NotFoundException> {
ExampleLogger logger = new ExampleLogger();
@Override
public Response toResponse(final NotFoundException exception) {
logger.error(urlFrom(exception), exception);
return Response.status(404).build();
}
private String urlFrom(final NotFoundException exception) {
return "why is this not a property on the exception?!";
}
private class ExampleLogger {
void error(final String notFoundUrl, final NotFoundException exception) {
System.out.println("someone tried to load " + notFoundUrl);
System.out.println(exception.getMessage());
}
}
}
Если мы посмотрим журналы приложения, когда кто-то запрашивает URL-адрес, который не обслуживается приложением, мы увидим, что приложение может записать, что оно возвращает 404 для пути, но наш пользовательский регистратор не имеет доступа к URL-адресу
someone tried to load why is this not a property on the exception?!
HTTP 404 Not Found
127.0.0.1 - - [08/May/2019:09:53:47 +0000] "GET /ping/pong HTTP/1.1" 404
Является ли ExceptionMapper
неправильным способом сделать это?