From f75ff81b32000a76359019fe8241ff6f97d0d947 Mon Sep 17 00:00:00 2001 From: hengboy Date: Mon, 3 Aug 2020 09:58:02 +0800 Subject: [PATCH] Add "LoggingFactoryBeanCustomizers" --- .../ApiBootLoggingAutoConfiguration.java | 19 ++++++---- .../LoggingFactoryBeanCustomizers.java | 37 +++++++++++++++++++ .../logging/AppendIgnorePathCustomizer.java | 21 +++++++++++ 3 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/LoggingFactoryBeanCustomizers.java create mode 100644 api-boot-samples/api-boot-sample-logging/src/main/java/org/minbox/framework/api/boot/sample/logging/AppendIgnorePathCustomizer.java diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingAutoConfiguration.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingAutoConfiguration.java index 4b82ad70..3e866abf 100644 --- a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingAutoConfiguration.java +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/ApiBootLoggingAutoConfiguration.java @@ -25,6 +25,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; +import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizers; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -38,6 +40,7 @@ import org.springframework.util.ObjectUtils; import java.util.List; +import java.util.stream.Collectors; import static org.minbox.framework.api.boot.autoconfigure.logging.ApiBootLoggingProperties.API_BOOT_LOGGING_PREFIX; @@ -74,18 +77,24 @@ public ApiBootLoggingAutoConfiguration(ApiBootLoggingProperties apiBootLoggingPr this.apiBootLoggingProperties = apiBootLoggingProperties; } + @Bean + @ConditionalOnMissingBean + public LoggingFactoryBeanCustomizers loggingFactoryBeanCustomizers(ObjectProvider customizers) { + return new LoggingFactoryBeanCustomizers(customizers.orderedStream().collect(Collectors.toList())); + } + /** * logging factory bean * {@link LoggingFactoryBean} * * @param loggingAdminDiscoveryObjectProvider Logging Admin Discovery Instance Provider - * @param customizerObjectProvider LoggingFactory Bean Customizer + * @param customizers LoggingFactory Bean Customizers * @return LoggingFactoryBean */ @Bean @ConditionalOnMissingBean public LoggingFactoryBean loggingFactoryBean(ObjectProvider loggingAdminDiscoveryObjectProvider, - ObjectProvider> customizerObjectProvider) { + LoggingFactoryBeanCustomizers customizers) { LoggingFactoryBean factoryBean = new LoggingFactoryBean(); factoryBean.setIgnorePaths(apiBootLoggingProperties.getIgnorePaths()); factoryBean.setIgnoreHttpStatus(apiBootLoggingProperties.getIgnoreHttpStatus()); @@ -97,12 +106,8 @@ public LoggingFactoryBean loggingFactoryBean(ObjectProvider customizers = customizerObjectProvider.getIfAvailable(); - if (!ObjectUtils.isEmpty(customizers)) { - customizers.stream().forEach(customizer -> customizer.customize(factoryBean)); - } logger.info("【LoggingFactoryBean】init successfully."); - return factoryBean; + return customizers.customize(factoryBean); } /** diff --git a/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/LoggingFactoryBeanCustomizers.java b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/LoggingFactoryBeanCustomizers.java new file mode 100644 index 00000000..f810ffa1 --- /dev/null +++ b/api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/logging/LoggingFactoryBeanCustomizers.java @@ -0,0 +1,37 @@ +package org.minbox.framework.api.boot.autoconfigure.logging; + +import org.minbox.framework.logging.client.LoggingFactoryBean; +import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; +import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizers; +import org.springframework.boot.util.LambdaSafe; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * The {@link LoggingFactoryBeanCustomizer} collection processing class + * + * @author 恒宇少年 + */ +public class LoggingFactoryBeanCustomizers { + private List customizers; + + public LoggingFactoryBeanCustomizers(List customizers) { + this.customizers = (customizers != null) ? new ArrayList<>(customizers) : Collections.emptyList(); + } + + /** + * Customize the specified {@link LoggingFactoryBean}. Locates all + * {@link LoggingFactoryBeanCustomizer} beans able to handle the specified instance and + * invoke {@link LoggingFactoryBeanCustomizer#customize(LoggingFactoryBean)} on them. + * + * @param factoryBean the logging factory bean to customize + * @return the factory bean + */ + public LoggingFactoryBean customize(LoggingFactoryBean factoryBean) { + LambdaSafe.callbacks(LoggingFactoryBeanCustomizer.class, this.customizers, factoryBean) + .withLogger(LoggingFactoryBeanCustomizer.class).invoke((customizer) -> customizer.customize(factoryBean)); + return factoryBean; + } +} diff --git a/api-boot-samples/api-boot-sample-logging/src/main/java/org/minbox/framework/api/boot/sample/logging/AppendIgnorePathCustomizer.java b/api-boot-samples/api-boot-sample-logging/src/main/java/org/minbox/framework/api/boot/sample/logging/AppendIgnorePathCustomizer.java new file mode 100644 index 00000000..545655af --- /dev/null +++ b/api-boot-samples/api-boot-sample-logging/src/main/java/org/minbox/framework/api/boot/sample/logging/AppendIgnorePathCustomizer.java @@ -0,0 +1,21 @@ +package org.minbox.framework.api.boot.sample.logging; + +import org.minbox.framework.api.boot.autoconfigure.logging.LoggingFactoryBeanCustomizer; +import org.minbox.framework.logging.client.LoggingFactoryBean; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * {@link LoggingFactoryBeanCustomizer}实现类 + * 新增排除日志拦截输出的路径 + * + * @author 恒宇少年 + */ +@Component +@Order(2) +public class AppendIgnorePathCustomizer implements LoggingFactoryBeanCustomizer { + @Override + public void customize(LoggingFactoryBean factoryBean) { + factoryBean.getIgnorePaths().add("/test"); + } +}