如何使用underflow在Spring Boot中禁用管理上下文访问日志



我使用的是带有嵌入式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未定义或与主上下文相同,这将产生意想不到的后果。

相关内容

  • 没有找到相关文章

最新更新