|
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