001package io.freefair.spring.okhttp.logging;
002
003import io.freefair.spring.okhttp.ApplicationInterceptor;
004import io.freefair.spring.okhttp.OkHttp3AutoConfiguration;
005import okhttp3.logging.HttpLoggingInterceptor;
006import org.springframework.beans.factory.ObjectProvider;
007import org.springframework.boot.autoconfigure.AutoConfigureBefore;
008import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
009import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
010import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
011import org.springframework.boot.context.properties.EnableConfigurationProperties;
012import org.springframework.context.annotation.Bean;
013import org.springframework.context.annotation.Configuration;
014
015/**
016 * @author Lars Grefer
017 */
018@Configuration(proxyBeanMethods = false)
019@ConditionalOnClass(HttpLoggingInterceptor.class)
020@AutoConfigureBefore(OkHttp3AutoConfiguration.class)
021@EnableConfigurationProperties(OkHttp3LoggingInterceptorProperties.class)
022public class OkHttp3LoggingInterceptorAutoConfiguration {
023
024    @Bean
025    @ApplicationInterceptor
026    @ConditionalOnMissingBean
027    @ConditionalOnProperty(value = "okhttp.logging.enabled", havingValue = "true", matchIfMissing = true)
028    public HttpLoggingInterceptor okHttp3LoggingInterceptor(
029            OkHttp3LoggingInterceptorProperties properties,
030            ObjectProvider<HttpLoggingInterceptor.Logger> logger
031    ) {
032        HttpLoggingInterceptor.Logger actualLogger = logger.getIfUnique(() -> HttpLoggingInterceptor.Logger.DEFAULT);
033
034        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(actualLogger);
035
036        //noinspection deprecation
037        httpLoggingInterceptor.setLevel(properties.getLevel());
038
039        return httpLoggingInterceptor;
040    }
041}