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

问题描述 投票:0回答:1

我正在使用带有嵌入式Undertow的Spring Boot 2.2.4。我已使用server.underdow.accesslog.enabled=true启用了访问日志,并且一切正常。

我正在使用不同端口上的执行器端点来设置子上下文。我not希望记录对执行器的请求。当前,它们会自动转到management_access.log,其中access.是我的主访问日志的前缀。关于如何禁用该访问日志的任何想法?我知道Spring正在通过Factory为执行器上下文创建一个单独的WebServer,但是我还没有找到一种定制工厂的方法。

spring-boot spring-boot-actuator undertow access-log
1个回答
0
投票

我找到了自己的答案(花了太多时间做)。这有点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或与主要上下文相同,将会产生意想不到的结果。

© www.soinside.com 2019 - 2024. All rights reserved.