Skip to content

Commit 6812da0

Browse files
committed
Enhances logging for requests and jobs
Adds client IP and User-Agent to request logging for better traceability. Includes duration in job completion logs, providing performance insights. Provides more detailed logging on exceptions with client IP, request details, and exception message, aiding in debugging.
1 parent ed5d0c2 commit 6812da0

File tree

5 files changed

+47
-25
lines changed

5 files changed

+47
-25
lines changed

src/main/java/com/dmware/api_onibusbh/config/RequestLoggingFilter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
3737

3838
try {
3939
String clientIp = ClientIpUtils.getClientIp(request);
40-
logger.info("Requisição recebida: {} {}", request.getMethod(), request.getRequestURI(),
40+
logger.info("Requisição recebida | {} {} | IP: {} | UA: {}",
41+
request.getMethod(), request.getRequestURI(), clientIp, request.getHeader("User-Agent"),
4142
kv("method", request.getMethod()),
4243
kv("uri", request.getRequestURI()),
4344
kv("client_ip", clientIp),
@@ -48,10 +49,11 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
4849

4950
long duration = System.currentTimeMillis() - startTime;
5051

51-
logger.info("Requisição finalizada: {} {} - Status: {} - Tempo: {}ms",
52+
logger.info("Requisição finalizada | {} {} | Status: {} | IP: {} | Tempo: {}ms",
5253
request.getMethod(),
5354
request.getRequestURI(),
5455
response.getStatus(),
56+
clientIp,
5557
duration,
5658
kv("status_code", response.getStatus()),
5759
kv("duration_ms", duration),

src/main/java/com/dmware/api_onibusbh/infra/CustomExceptionHandler.java

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,125 +24,145 @@ public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
2424

2525
@ExceptionHandler(LinhasNotFoundException.class)
2626
public ResponseEntity<ErrorResponse> linhasNotFoundException(LinhasNotFoundException ex, HttpServletRequest request) {
27-
logger.warn("Recurso não encontrado",
27+
String clientIp = ClientIpUtils.getClientIp(request);
28+
logger.warn("Recurso não encontrado | {} {} | IP: {} | Detalhe: {}",
29+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
2830
kv("exception", ex.getClass().getSimpleName()),
2931
kv("status", HttpStatus.NOT_FOUND),
3032
kv("detail", ex.getMessage()),
3133
kv("path", request.getRequestURI()),
3234
kv("method", request.getMethod()),
33-
kv("client_ip", ClientIpUtils.getClientIp(request)));
35+
kv("client_ip", clientIp));
3436
return ErrorResponse.of("Não foi encontrada nenhuma linha, por favor tente novamente", HttpStatus.NOT_FOUND);
3537
}
3638

3739
@ExceptionHandler(CoordenadasNotFoundException.class)
3840
public ResponseEntity<ErrorResponse> coordenadasNotFoundException(CoordenadasNotFoundException ex, HttpServletRequest request) {
39-
logger.warn("Recurso não encontrado",
41+
String clientIp = ClientIpUtils.getClientIp(request);
42+
logger.warn("Recurso não encontrado | {} {} | IP: {} | Detalhe: {}",
43+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
4044
kv("exception", ex.getClass().getSimpleName()),
4145
kv("status", HttpStatus.NOT_FOUND),
4246
kv("detail", ex.getMessage()),
4347
kv("path", request.getRequestURI()),
4448
kv("method", request.getMethod()),
45-
kv("client_ip", ClientIpUtils.getClientIp(request)));
49+
kv("client_ip", clientIp));
4650
return ErrorResponse.of("Não foi encontrada nenhuma coordenada, por favor tente novamente",
4751
HttpStatus.NOT_FOUND);
4852
}
4953

5054
@ExceptionHandler(DicionarioNotFoundException.class)
5155
public ResponseEntity<ErrorResponse> dicionarioNotFoundException(DicionarioNotFoundException ex, HttpServletRequest request) {
52-
logger.warn("Recurso não encontrado",
56+
String clientIp = ClientIpUtils.getClientIp(request);
57+
logger.warn("Recurso não encontrado | {} {} | IP: {} | Detalhe: {}",
58+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
5359
kv("exception", ex.getClass().getSimpleName()),
5460
kv("status", HttpStatus.NOT_FOUND),
5561
kv("detail", ex.getMessage()),
5662
kv("path", request.getRequestURI()),
5763
kv("method", request.getMethod()),
58-
kv("client_ip", ClientIpUtils.getClientIp(request)));
64+
kv("client_ip", clientIp));
5965
return ErrorResponse.of("Não foi encontrado o dicionário para os dados, por favor tente novamente",
6066
HttpStatus.NOT_FOUND);
6167
}
6268

6369
@ExceptionHandler(LinhaNotFoundException.class)
6470
public ResponseEntity<ErrorResponse> linhaNotFoundException(LinhaNotFoundException ex, HttpServletRequest request) {
65-
logger.warn("Recurso não encontrado",
71+
String clientIp = ClientIpUtils.getClientIp(request);
72+
logger.warn("Recurso não encontrado | {} {} | IP: {} | Detalhe: {}",
73+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
6674
kv("exception", ex.getClass().getSimpleName()),
6775
kv("status", HttpStatus.NOT_FOUND),
6876
kv("detail", ex.getMessage()),
6977
kv("path", request.getRequestURI()),
7078
kv("method", request.getMethod()),
71-
kv("client_ip", ClientIpUtils.getClientIp(request)));
79+
kv("client_ip", clientIp));
7280
return ErrorResponse.of("Não foi encontrada nenhuma linha, por favor tente novamente", HttpStatus.NOT_FOUND);
7381
}
7482

7583
@ExceptionHandler(ValidJsonException.class)
7684
public ResponseEntity<ErrorResponse> validJsonException(ValidJsonException ex, HttpServletRequest request) {
77-
logger.warn("Erro de validação JSON",
85+
String clientIp = ClientIpUtils.getClientIp(request);
86+
logger.warn("Erro de validação JSON | {} {} | IP: {} | Detalhe: {}",
87+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
7888
kv("exception", ex.getClass().getSimpleName()),
7989
kv("status", HttpStatus.BAD_REQUEST),
8090
kv("detail", ex.getMessage()),
8191
kv("path", request.getRequestURI()),
8292
kv("method", request.getMethod()),
83-
kv("client_ip", ClientIpUtils.getClientIp(request)));
93+
kv("client_ip", clientIp));
8494
return ErrorResponse.of(ex.getMessage(), HttpStatus.BAD_REQUEST);
8595
}
8696

8797
@ExceptionHandler(RuntimeException.class)
8898
public ResponseEntity<ErrorResponse> runtimeException(RuntimeException ex, HttpServletRequest request) {
89-
logger.error("Erro interno não tratado",
99+
String clientIp = ClientIpUtils.getClientIp(request);
100+
logger.error("Erro interno não tratado | {} {} | IP: {} | Detalhe: {}",
101+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
90102
kv("exception", ex.getClass().getSimpleName()),
91103
kv("status", HttpStatus.INTERNAL_SERVER_ERROR),
92104
kv("detail", ex.getMessage()),
93105
kv("path", request.getRequestURI()),
94106
kv("method", request.getMethod()),
95-
kv("client_ip", ClientIpUtils.getClientIp(request)),
107+
kv("client_ip", clientIp),
96108
ex);
97109
return ErrorResponse.of("Ocorreu um erro interno, por favor tente novamente", HttpStatus.INTERNAL_SERVER_ERROR);
98110
}
99111

100112
@ExceptionHandler(IOException.class)
101113
public ResponseEntity<ErrorResponse> ioException(IOException ex, HttpServletRequest request) {
102-
logger.error("Erro interno não tratado",
114+
String clientIp = ClientIpUtils.getClientIp(request);
115+
logger.error("Erro interno não tratado | {} {} | IP: {} | Detalhe: {}",
116+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
103117
kv("exception", ex.getClass().getSimpleName()),
104118
kv("status", HttpStatus.INTERNAL_SERVER_ERROR),
105119
kv("detail", ex.getMessage()),
106120
kv("path", request.getRequestURI()),
107121
kv("method", request.getMethod()),
108-
kv("client_ip", ClientIpUtils.getClientIp(request)),
122+
kv("client_ip", clientIp),
109123
ex);
110124
return ErrorResponse.of("Ocorreu um erro interno, por favor tente novamente", HttpStatus.INTERNAL_SERVER_ERROR);
111125
}
112126

113127
@ExceptionHandler(NoResourceFoundException.class)
114128
public ResponseEntity<ErrorResponse> noResourceFoundException(NoResourceFoundException ex, HttpServletRequest request) {
115-
logger.warn("Recurso não encontrado",
129+
String clientIp = ClientIpUtils.getClientIp(request);
130+
logger.warn("Recurso não encontrado | {} {} | IP: {} | Detalhe: {}",
131+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
116132
kv("exception", ex.getClass().getSimpleName()),
117133
kv("status", HttpStatus.NOT_FOUND),
118134
kv("detail", ex.getMessage()),
119135
kv("path", request.getRequestURI()),
120136
kv("method", request.getMethod()),
121-
kv("client_ip", ClientIpUtils.getClientIp(request)));
137+
kv("client_ip", clientIp));
122138
return ErrorResponse.of("Verifique a rota digitada ou os dados enviados", HttpStatus.NOT_FOUND);
123139
}
124140

125141
@ExceptionHandler(NoHandlerFoundException.class)
126142
public ResponseEntity<ErrorResponse> noHandlerFoundException(NoHandlerFoundException ex, HttpServletRequest request) {
127-
logger.warn("Recurso não encontrado",
143+
String clientIp = ClientIpUtils.getClientIp(request);
144+
logger.warn("Recurso não encontrado | {} {} | IP: {} | Detalhe: {}",
145+
request.getMethod(), request.getRequestURI(), clientIp, ex.getMessage(),
128146
kv("exception", ex.getClass().getSimpleName()),
129147
kv("status", HttpStatus.NOT_FOUND),
130148
kv("detail", ex.getMessage()),
131149
kv("path", request.getRequestURI()),
132150
kv("method", request.getMethod()),
133-
kv("client_ip", ClientIpUtils.getClientIp(request)));
151+
kv("client_ip", clientIp));
134152
return ErrorResponse.of("Verifique a rota digitada ou os dados enviados", HttpStatus.NOT_FOUND);
135153
}
136154

137155
@ExceptionHandler(RateLimitExceededException.class)
138156
public ResponseEntity<ErrorResponse> rateLimitExceededException(RateLimitExceededException ex, HttpServletRequest request) {
139-
logger.warn("Rate limit excedido",
157+
String clientIp = ClientIpUtils.getClientIp(request);
158+
logger.warn("Rate limit excedido | {} {} | IP: {} | Retry-After: {}s",
159+
request.getMethod(), request.getRequestURI(), clientIp, ex.getRetryAfterSeconds(),
140160
kv("exception", ex.getClass().getSimpleName()),
141161
kv("status", HttpStatus.TOO_MANY_REQUESTS),
142162
kv("retry_after", ex.getRetryAfterSeconds()),
143163
kv("path", request.getRequestURI()),
144164
kv("method", request.getMethod()),
145-
kv("client_ip", ClientIpUtils.getClientIp(request)));
165+
kv("client_ip", clientIp));
146166
return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS)
147167
.header("X-Rate-Limit-Retry-After-Seconds", String.valueOf(ex.getRetryAfterSeconds()))
148168
.body(new ErrorResponse(java.time.LocalDateTime.now(), ex.getMessage(), HttpStatus.TOO_MANY_REQUESTS));

src/main/java/com/dmware/api_onibusbh/scheduler/CoordenadasScheduler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void fetchCoordenadasOnibus() {
3434
List<CoordenadaDTO> coordenadas = apiService.getOnibusCoordenadaBH();
3535
onibusService.salvaCoordenadas(coordenadas);
3636
long duration = System.currentTimeMillis() - startTime;
37-
logger.info("Job de Coordenadas finalizado.",
37+
logger.info("Job de Coordenadas finalizado | Tempo: {}ms", duration,
3838
kv("job_name", "Coordenadas"),
3939
kv("status", "FINISHED"),
4040
kv("duration_ms", duration));

src/main/java/com/dmware/api_onibusbh/scheduler/DicionarioScheduler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void salvaDicionarioBanco() {
3030
logger.info("Job de Dicionário iniciado.", kv("job_name", "Dicionario"), kv("status", "STARTED"));
3131
dicionarioService.salvarDicionarioBanco();
3232
long duration = System.currentTimeMillis() - startTime;
33-
logger.info("Job de Dicionário finalizado.",
33+
logger.info("Job de Dicionário finalizado | Tempo: {}ms", duration,
3434
kv("job_name", "Dicionario"),
3535
kv("status", "FINISHED"),
3636
kv("duration_ms", duration));

src/main/java/com/dmware/api_onibusbh/scheduler/LinhaScheduler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void fetchCoordenadasOnibus() {
3030
logger.info("Job agendado iniciado: Atualização de Coordenadas/Linhas.", kv("job_name", "Linhas"), kv("status", "STARTED"));
3131
linhasService.salvaLinhasNormais();
3232
long duration = System.currentTimeMillis() - startTime;
33-
logger.info("Job agendado finalizado: Atualização de Coordenadas/Linhas.",
33+
logger.info("Job agendado finalizado: Atualização de Coordenadas/Linhas | Tempo: {}ms", duration,
3434
kv("job_name", "Linhas"),
3535
kv("status", "FINISHED"),
3636
kv("duration_ms", duration));

0 commit comments

Comments
 (0)