Как отключить управление доступом к контекстному журналу в Spring Boot с помощью undertow - PullRequest
0 голосов
/ 21 марта 2020

Я использую Spring Boot 2.2.4 со встроенным Undertow. Я включил журнал доступа, используя server.underdow.accesslog.enabled=true, и все работает как положено.

Я использую конечные точки привода на другом порту, который устанавливает дочерний контекст. Я не хочу, чтобы запросы к приводу регистрировались. В настоящее время они автоматически go до management_access.log, где access. - это префикс моего основного журнала доступа. Любые идеи о том, как отключить этот журнал доступа? Я знаю, что Spring создает отдельный WebServer через Factory для контекста привода, но я не нашел способа настроить фабрику.

1 Ответ

0 голосов
/ 21 марта 2020

Я нашел свой ответ (потратил слишком много времени на это). Это немного взломано, но работает:

Новый класс конфигурации: 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, чтобы он был подобран by ManagementContext:

org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=foo.ManagementConfig

Часть, которая немного взломана, является оператором if. Было бы замечательно, если бы он применялся только к контексту управления, но по какой-то причине он пытается применяться к обоим. С оператором if он просто ничего не делает для основного контекста.

Это может привести к непредвиденным последствиям, если management.server.port не определено или если оно совпадает с основным контекстом.

...