|
16 | 16 |
|
17 | 17 | package org.springframework.boot.actuate.autoconfigure.metrics;
|
18 | 18 |
|
| 19 | +import ch.qos.logback.classic.LoggerContext; |
19 | 20 | import io.micrometer.core.annotation.Timed;
|
20 | 21 | import io.micrometer.core.instrument.Clock;
|
21 | 22 | import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
|
|
26 | 27 | import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics;
|
27 | 28 | import io.micrometer.core.instrument.binder.system.ProcessorMetrics;
|
28 | 29 | import io.micrometer.core.instrument.binder.system.UptimeMetrics;
|
| 30 | +import org.slf4j.ILoggerFactory; |
| 31 | +import org.slf4j.LoggerFactory; |
29 | 32 |
|
30 | 33 | import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
31 | 34 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
| 35 | +import org.springframework.boot.autoconfigure.condition.ConditionMessage; |
| 36 | +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; |
32 | 37 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
33 | 38 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
34 | 39 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
| 40 | +import org.springframework.boot.autoconfigure.condition.SpringBootCondition; |
35 | 41 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
36 | 42 | import org.springframework.context.ApplicationContext;
|
37 | 43 | import org.springframework.context.annotation.Bean;
|
| 44 | +import org.springframework.context.annotation.ConditionContext; |
| 45 | +import org.springframework.context.annotation.Conditional; |
38 | 46 | import org.springframework.context.annotation.Configuration;
|
39 | 47 | import org.springframework.core.annotation.Order;
|
| 48 | +import org.springframework.core.type.AnnotatedTypeMetadata; |
40 | 49 |
|
41 | 50 | /**
|
42 | 51 | * {@link EnableAutoConfiguration Auto-configuration} for Micrometer-based metrics.
|
@@ -103,7 +112,9 @@ public ClassLoaderMetrics classLoaderMetrics() {
|
103 | 112 | static class MeterBindersConfiguration {
|
104 | 113 |
|
105 | 114 | @Bean
|
106 |
| - @ConditionalOnClass(name = "ch.qos.logback.classic.Logger") |
| 115 | + @ConditionalOnClass(name = { "ch.qos.logback.classic.LoggerContext", |
| 116 | + "org.slf4j.LoggerFactory" }) |
| 117 | + @Conditional(LogbackLoggingCondition.class) |
107 | 118 | @ConditionalOnMissingBean(LogbackMetrics.class)
|
108 | 119 | @ConditionalOnProperty(value = "management.metrics.binders.logback.enabled", matchIfMissing = true)
|
109 | 120 | public LogbackMetrics logbackMetrics() {
|
@@ -133,4 +144,23 @@ public FileDescriptorMetrics fileDescriptorMetrics() {
|
133 | 144 |
|
134 | 145 | }
|
135 | 146 |
|
| 147 | + static class LogbackLoggingCondition extends SpringBootCondition { |
| 148 | + |
| 149 | + @Override |
| 150 | + public ConditionOutcome getMatchOutcome(ConditionContext context, |
| 151 | + AnnotatedTypeMetadata metadata) { |
| 152 | + ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory(); |
| 153 | + ConditionMessage.Builder message = ConditionMessage |
| 154 | + .forCondition("LogbackLoggingCondition"); |
| 155 | + if (loggerFactory instanceof LoggerContext) { |
| 156 | + return ConditionOutcome.match( |
| 157 | + message.because("ILoggerFactory is a Logback LoggerContext")); |
| 158 | + } |
| 159 | + return ConditionOutcome |
| 160 | + .noMatch(message.because("ILoggerFactory is an instance of " |
| 161 | + + loggerFactory.getClass().getCanonicalName())); |
| 162 | + } |
| 163 | + |
| 164 | + } |
| 165 | + |
136 | 166 | }
|
0 commit comments