Ich benutze Spring MVC ** Ich möchte die Anforderungs-URL und die Anforderungsparameter protokollieren! ** ** ** Das passierte oft und jedes Mal, wenn ich eine dedizierte Filterklasse erstellte,
Wäre es nicht glücklich, wenn ich es für mich selbst im Artikel belassen würde?
Ich dachte und beschrieb es. Es ist eine ganz persönliche Notiz.
Java 8 (funktioniert auch mit 11)
Spring Boot 2.2.1
Spring MVC (Version verwendet Boot-Regeln)
Lombok (Version verwendet Boot-Regeln)
Ich habe es nicht mit Spring Web Flux versucht.
package com.example.demo.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
@Slf4j
@Component
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = ((HttpServletRequest)request);
String uri = httpReq.getRequestURI();
long start = System.currentTimeMillis();
log.info(String.format("Starten Sie die Verarbeitung. URI: %s", uri));
//Verarbeiten Sie den Anforderungsparameter und geben Sie ihn als einzeiliges Protokoll aus
Map<String, String[]> params = httpReq.getParameterMap();
StringBuilder strParams = new StringBuilder("Parameter anfordern: [");
boolean isFirstParam = true;
for (Map.Entry<String, String[]> param : params.entrySet()) {
if (isFirstParam) {
isFirstParam = false;
} else {
//Fügen Sie ein Komma als Verkettung für den zweiten und die nachfolgenden Anforderungsparameter hinzu
strParams.append(", ");
}
strParams.append(param.getKey()).append("=").append(Arrays.toString(param.getValue()));
}
strParams.append("]");
log.info(strParams.toString());
//Implementierung jedes Prozesses
chain.doFilter(request, response);
int status = ((HttpServletResponse) response).getStatus();
log.info(String.format("Verarbeitung beenden.Benötigte Zeit%d millis. STATUS=%d", System.currentTimeMillis() - start, status));
}
@Override
public void destroy() {
}
}
2019-11-14 11:54:40.297 INFO 2001 --- [nio-8080-exec-1] com.example.demo.filter.LoggingFilter :Starten Sie die Verarbeitung. URI: /demo/hello
2019-11-14 11:54:40.298 INFO 2001 --- [nio-8080-exec-1] com.example.demo.filter.LoggingFilter :Parameter anfordern: [hoge=[1], fuga=[2]]
2019-11-14 11:54:40.327 INFO 2001 --- [nio-8080-exec-1] com.example.demo.filter.LoggingFilter :Verarbeitung beenden.Zeitaufwand 30 Millis. STATUS=200
Das Protokollformat bleibt der Spring Boot-Standard. Persönlich ist die Protokollausgabe auf Japanisch geschrieben, da sie auf Japanisch leicht zu verstehen ist. Manchmal denke ich, dass es besser ist, dies ein bisschen mehr zu tun, aber ich schreibe es oft in diesem Stil. Es ist nicht überraschend, dass die erweiterte For-Anweisung etwas ekelhaft ist, aber sie ist ärgerlich und wurde nicht überarbeitet.
Beachten Sie, dass dieser Filter Array-Parameter unterstützt, angehängte Dateien jedoch nicht.
Recommended Posts