|
1 | 1 | package com.dmware.api_onibusbh.infra; |
2 | 2 |
|
3 | 3 | import com.dmware.api_onibusbh.exceptions.*; |
| 4 | +import org.slf4j.Logger; |
| 5 | +import org.slf4j.LoggerFactory; |
4 | 6 | import org.springframework.http.HttpStatus; |
5 | 7 | import org.springframework.http.ResponseEntity; |
6 | 8 | import org.springframework.web.bind.annotation.ControllerAdvice; |
|
11 | 13 |
|
12 | 14 | import java.io.IOException; |
13 | 15 |
|
| 16 | +import static net.logstash.logback.argument.StructuredArguments.kv; |
| 17 | + |
14 | 18 | @ControllerAdvice |
15 | 19 | public class CustomExceptionHandler extends ResponseEntityExceptionHandler { |
16 | 20 |
|
| 21 | + private static final Logger logger = LoggerFactory.getLogger(CustomExceptionHandler.class); |
| 22 | + |
17 | 23 | @ExceptionHandler(LinhasNotFoundException.class) |
18 | 24 | public ResponseEntity<ErrorResponse> linhasNotFoundException(LinhasNotFoundException ex) { |
| 25 | + logger.warn("Recurso não encontrado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.NOT_FOUND)); |
19 | 26 | return ErrorResponse.of("Não foi encontrada nenhuma linha, por favor tente novamente", HttpStatus.NOT_FOUND); |
20 | 27 | } |
21 | 28 |
|
22 | 29 | @ExceptionHandler(CoordenadasNotFoundException.class) |
23 | 30 | public ResponseEntity<ErrorResponse> coordenadasNotFoundException(CoordenadasNotFoundException ex) { |
| 31 | + logger.warn("Recurso não encontrado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.NOT_FOUND)); |
24 | 32 | return ErrorResponse.of("Não foi encontrada nenhuma coordenada, por favor tente novamente", |
25 | 33 | HttpStatus.NOT_FOUND); |
26 | 34 | } |
27 | 35 |
|
28 | 36 | @ExceptionHandler(DicionarioNotFoundException.class) |
29 | 37 | public ResponseEntity<ErrorResponse> dicionarioNotFoundException(DicionarioNotFoundException ex) { |
| 38 | + logger.warn("Recurso não encontrado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.NOT_FOUND)); |
30 | 39 | return ErrorResponse.of("Não foi encontrado o dicionário para os dados, por favor tente novamente", |
31 | 40 | HttpStatus.NOT_FOUND); |
32 | 41 | } |
33 | 42 |
|
34 | 43 | @ExceptionHandler(LinhaNotFoundException.class) |
35 | 44 | public ResponseEntity<ErrorResponse> linhaNotFoundException(LinhaNotFoundException ex) { |
| 45 | + logger.warn("Recurso não encontrado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.NOT_FOUND)); |
36 | 46 | return ErrorResponse.of("Não foi encontrada nenhuma linha, por favor tente novamente", HttpStatus.NOT_FOUND); |
37 | 47 | } |
38 | 48 |
|
39 | 49 | @ExceptionHandler(ValidJsonException.class) |
40 | 50 | public ResponseEntity<ErrorResponse> validJsonException(ValidJsonException ex) { |
| 51 | + logger.warn("Erro de validação JSON", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.BAD_REQUEST), kv("mensagem_erro", ex.getMessage())); |
41 | 52 | return ErrorResponse.of(ex.getMessage(), HttpStatus.BAD_REQUEST); |
42 | 53 | } |
43 | 54 |
|
44 | 55 | @ExceptionHandler(RuntimeException.class) |
45 | 56 | public ResponseEntity<ErrorResponse> runtimeException(RuntimeException ex) { |
46 | | - logger.error(ex.getMessage(), ex); |
| 57 | + logger.error("Erro interno não tratado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.INTERNAL_SERVER_ERROR), ex); |
47 | 58 | return ErrorResponse.of("Ocorreu um erro interno, por favor tente novamente", HttpStatus.INTERNAL_SERVER_ERROR); |
48 | 59 | } |
49 | 60 |
|
50 | 61 | @ExceptionHandler(IOException.class) |
51 | 62 | public ResponseEntity<ErrorResponse> ioException(IOException ex) { |
| 63 | + logger.error("Erro interno não tratado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.INTERNAL_SERVER_ERROR), ex); |
52 | 64 | return ErrorResponse.of("Ocorreu um erro interno, por favor tente novamente", HttpStatus.INTERNAL_SERVER_ERROR); |
53 | 65 | } |
54 | 66 |
|
55 | 67 | @ExceptionHandler(NoResourceFoundException.class) |
56 | 68 | public ResponseEntity<ErrorResponse> noResourceFoundException(NoResourceFoundException ex) { |
| 69 | + logger.warn("Recurso não encontrado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.NOT_FOUND)); |
57 | 70 | return ErrorResponse.of("Verifique a rota digitada ou os dados enviados", HttpStatus.NOT_FOUND); |
58 | 71 | } |
59 | 72 |
|
60 | 73 | @ExceptionHandler(NoHandlerFoundException.class) |
61 | 74 | public ResponseEntity<ErrorResponse> noHandlerFoundException(NoHandlerFoundException ex) { |
| 75 | + logger.warn("Recurso não encontrado", kv("exception", ex.getClass().getSimpleName()), kv("status", HttpStatus.NOT_FOUND)); |
62 | 76 | return ErrorResponse.of("Verifique a rota digitada ou os dados enviados", HttpStatus.NOT_FOUND); |
63 | 77 | } |
64 | 78 | } |
0 commit comments