lev*_*ver 12 java logging spring spring-boot
CommonsRequestLoggingFilter在记录请求方面非常好,但就我而言,它在处理请求之前和之后记录相同的内容,这是重复且冗余的。我想摆脱请求后处理日志,但我找不到如何做到这一点。有任何想法吗?
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CommonsRequestLoggingFilter;
@Configuration
public class RequestLoggingFilterConfig {
@Bean
public CommonsRequestLoggingFilter logFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeClientInfo(true);
filter.setIncludeHeaders(true);
filter.setIncludePayload(false);
filter.setIncludeQueryString(true);
return filter;
}
}
Run Code Online (Sandbox Code Playgroud)
我从这里开始。
org.springframework.web.filter.CommonsRequestLoggingFilter类只是org.springframework.web.filter.AbstractRequestLoggingFilter的子类。因此,跳过 CommonsRequestLoggingFilter 并编写您自己的子类,并将覆盖的方法保留afterRequest()为空。
public class CustomizedRequestLoggingFilter extends AbstractRequestLoggingFilter {
@Override
protected void beforeRequest(HttpServletRequest httpServletRequest, String message) {
this.logger.debug(message);
}
@Override
protected void afterRequest(HttpServletRequest httpServletRequest, String message) {
}
}
Run Code Online (Sandbox Code Playgroud)
使用此类代替org.springframework.web.filter.CommonsRequestLoggingFilter
为了避免重复记录,在实例化时,CommonsRequestLoggingFilter您必须覆盖两者之一:
要禁用 afterRequest() 中的日志记录,可以更改 OP 的代码,如下所示:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CommonsRequestLoggingFilter;
@Configuration
public class RequestLoggingFilterConfig {
@Bean
public CommonsRequestLoggingFilter logFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter() {
@Override
public void afterRequest(HttpServletRequest request, String message) {
// No body, we are just overriding the default behavior
}
};
filter.setIncludeClientInfo(true);
filter.setIncludeHeaders(true);
filter.setIncludePayload(false);
filter.setIncludeQueryString(true);
return filter;
}
}
Run Code Online (Sandbox Code Playgroud)