我正在使用带有嵌入式Undertow的Spring Boot 2.2.4。我已使用server.underdow.accesslog.enabled=true
启用了访问日志,并且一切正常。
我正在使用不同端口上的执行器端点来设置子上下文。我not希望记录对执行器的请求。当前,它们会自动转到management_access.log
,其中access.
是我的主访问日志的前缀。关于如何禁用该访问日志的任何想法?我知道Spring正在通过Factory为执行器上下文创建一个单独的WebServer,但是我还没有找到一种定制工厂的方法。
我找到了自己的答案(花了太多时间做)。这有点hack,但是可以用:
新配置类:foo.ManagementConfig
package foo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
@ManagementContextConfiguration
public class ManagementConfig {
@Bean
WebServerFactoryCustomizer<UndertowServletWebServerFactory> actuatorCustomizer(@Value("${management.server.port}") int managementPort) {
return factory -> {
if (managementPort == factory.getPort()) {
factory.setAccessLogEnabled(false);
}
};
}
}
创建的资源/META-INF/spring.factories,以便ManagementContext对其进行提取:
org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=foo.ManagementConfig
有点麻烦的部分是if
语句。如果仅将它应用于管理上下文,那会很棒,但是由于某种原因,它试图同时应用于两者。使用if语句,它对于主上下文什么都不做。
如果未定义management.server.port
或与主要上下文相同,将会产生意想不到的结果。