Heim >Java >javaLernprogramm >Wie kann ich Anforderungen, Antworten und Ausnahmen effektiv in meiner Spring Boot-REST-API protokollieren?

Wie kann ich Anforderungen, Antworten und Ausnahmen effektiv in meiner Spring Boot-REST-API protokollieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-23 04:13:11377Durchsuche

How Can I Effectively Log Requests, Responses, and Exceptions in My Spring Boot REST API?

Anfragen und Antworten in Spring Boot protokollieren

Bei der Entwicklung von REST-APIs mit Spring Boot kann die Protokollierung von Anfragen und Antworten für Debugging-Zwecke und entscheidend sein Einblicke in das Anwendungsverhalten gewinnen. Dazu gehört die Protokollierung nicht nur erfolgreicher Anfragen, sondern auch aufgetretener Ausnahmen.

Verwendung von Spring Boot Actuator

Das Spring Boot Actuator-Modul bietet eine integrierte HTTP-Anfrageprotokollierungsfunktion. Um die Anforderungsprotokollierung zu aktivieren, führen Sie die folgenden Schritte aus:

  1. Fügen Sie die Spring-Boot-Starter-Actuator-Abhängigkeit zu Ihrem Projekt hinzu.
  2. Konfigurieren Sie die Endpunkte, die verfügbar gemacht werden sollen (z. B. Management). endpoints.web.base-path=/actuator).
  3. Zugriff auf /trace (für Spring Boot 1.x) oder /actuator/httptrace (für Spring Boot 2.0) Endpunkt zum Anzeigen der letzten 100 HTTP-Anfragen.

Anforderungsprotokollierung anpassen

Das Anforderungsprotokollierungsverhalten kann angepasst werden Dies wird durch die Implementierung eines WebFilters erreicht. Dadurch können Sie Anfragen abfangen und manipulieren, bevor sie von den Controllern Ihrer Anwendung verarbeitet werden. Hier ist ein Beispiel für einen benutzerdefinierten Webfilter, der Anfragen und Antworten protokolliert:

public class RequestResponseLoggingFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        // Log the request
        logRequest(exchange);

        // Log the response
        return chain.filter(exchange).then(logResponse(exchange));
    }

    private void logRequest(ServerWebExchange exchange) {
        String path = exchange.getRequest().getPath().toString();
        String method = exchange.getRequest().getMethodValue();
        String clientIp = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();
        String queryString = exchange.getRequest().getQueryParams().toString();
        // ... (additional request information)
    }

    private Mono<Void> logResponse(ServerWebExchange exchange) {
        return exchange.getResponse().writeWith(processor -> {
            // ... (read the response, log the status code, response headers, etc.)
        });
    }
}

Registrieren Sie den Filter in Ihrer Spring Boot-Anwendung mit WebFilterRegistrationBean:

@Bean
public WebFilterRegistrationBean<RequestResponseLoggingFilter> requestResponseLoggingFilter() {
    return new WebFilterRegistrationBean<>(new RequestResponseLoggingFilter());
}

Behandlung von Ausnahmen

Um Ausnahmen einheitlich zu behandeln und zu protokollieren, können Sie die Annotation @ExceptionHandler auf einem Controller verwenden oder Serviceklasse. Zum Beispiel:

@RestController
public class MyController {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Error> handleException(Exception e) {
        // Log the exception
        // ...
        
        // Return the error response
        Error error = new Error();
        error.setMessage(e.getMessage());
        error.setErrorCode(101); // Custom error code
        
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
    }
}

Durch die Kombination des benutzerdefinierten Webfilters mit dem Ausnahmehandler können Sie alle Anfragen, Antworten und Ausnahmen konsistent protokollieren.

Das obige ist der detaillierte Inhalt vonWie kann ich Anforderungen, Antworten und Ausnahmen effektiv in meiner Spring Boot-REST-API protokollieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn