我使用的是带有嵌入式Undertow的Spring Boot 2.2.4。我已经使用server.underdow.accesslog.enabled=true
启用了访问日志,一切都按预期进行。
我正在利用另一个端口上的执行器端点来设置子上下文。我不希望记录对执行机构的请求。目前,它们会自动转到management_access.log
,其中access.
是我的主访问日志的前缀。关于如何禁用访问日志,有什么想法吗?我知道Spring正在通过Factory为执行器上下文创建一个单独的WebServer,但我还没有找到自定义工厂的方法。
我找到了自己的答案(花了太多时间(。这有点像黑客,但它有效:
新的配置类: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);
}
};
}
}
创建了resources/META-INF/spring.factores,以便由ManagementContext:获取
org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=foo.ManagementConfig
有点破解的部分是if
语句。如果它只适用于管理环境,那就太好了,但出于某种原因,它试图同时适用于两者。对于if语句,它对主上下文没有任何作用。
如果management.server.port
未定义或与主上下文相同,这将产生意想不到的后果。