Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
c4c50b7c
Commit
c4c50b7c
authored
Feb 28, 2018
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Only auto-configure LogbackMetrics when Logback is actually being used
Closes gh-12286
parent
96ae1607
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
94 additions
and
6 deletions
+94
-6
pom.xml
...g-boot-project/spring-boot-actuator-autoconfigure/pom.xml
+5
-5
MetricsAutoConfiguration.java
...tuate/autoconfigure/metrics/MetricsAutoConfiguration.java
+31
-1
MetricsAutoConfigurationWithLog4j2AndLogbackTests.java
...cs/MetricsAutoConfigurationWithLog4j2AndLogbackTests.java
+58
-0
No files found.
spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
View file @
c4c50b7c
...
...
@@ -37,6 +37,11 @@
<artifactId>
spring-context
</artifactId>
</dependency>
<!-- Optional -->
<dependency>
<groupId>
ch.qos.logback
</groupId>
<artifactId>
logback-classic
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.dataformat
</groupId>
<artifactId>
jackson-dataformat-xml
</artifactId>
...
...
@@ -379,11 +384,6 @@
<artifactId>
spring-boot-test-support
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
ch.qos.logback
</groupId>
<artifactId>
logback-classic
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
io.projectreactor
</groupId>
<artifactId>
reactor-test
</artifactId>
...
...
spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java
View file @
c4c50b7c
...
...
@@ -16,6 +16,7 @@
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
.
metrics
;
import
ch.qos.logback.classic.LoggerContext
;
import
io.micrometer.core.annotation.Timed
;
import
io.micrometer.core.instrument.Clock
;
import
io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics
;
...
...
@@ -26,17 +27,25 @@ import io.micrometer.core.instrument.binder.logging.LogbackMetrics;
import
io.micrometer.core.instrument.binder.system.FileDescriptorMetrics
;
import
io.micrometer.core.instrument.binder.system.ProcessorMetrics
;
import
io.micrometer.core.instrument.binder.system.UptimeMetrics
;
import
org.slf4j.ILoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.boot.autoconfigure.AutoConfigureBefore
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.boot.autoconfigure.condition.ConditionMessage
;
import
org.springframework.boot.autoconfigure.condition.ConditionOutcome
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.SpringBootCondition
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ConditionContext
;
import
org.springframework.context.annotation.Conditional
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.core.type.AnnotatedTypeMetadata
;
/**
* {@link EnableAutoConfiguration Auto-configuration} for Micrometer-based metrics.
...
...
@@ -103,7 +112,9 @@ public class MetricsAutoConfiguration {
static
class
MeterBindersConfiguration
{
@Bean
@ConditionalOnClass
(
name
=
"ch.qos.logback.classic.Logger"
)
@ConditionalOnClass
(
name
=
{
"ch.qos.logback.classic.LoggerContext"
,
"org.slf4j.LoggerFactory"
})
@Conditional
(
LogbackLoggingCondition
.
class
)
@ConditionalOnMissingBean
(
LogbackMetrics
.
class
)
@ConditionalOnProperty
(
value
=
"management.metrics.binders.logback.enabled"
,
matchIfMissing
=
true
)
public
LogbackMetrics
logbackMetrics
()
{
...
...
@@ -133,4 +144,23 @@ public class MetricsAutoConfiguration {
}
static
class
LogbackLoggingCondition
extends
SpringBootCondition
{
@Override
public
ConditionOutcome
getMatchOutcome
(
ConditionContext
context
,
AnnotatedTypeMetadata
metadata
)
{
ILoggerFactory
loggerFactory
=
LoggerFactory
.
getILoggerFactory
();
ConditionMessage
.
Builder
message
=
ConditionMessage
.
forCondition
(
"LogbackLoggingCondition"
);
if
(
loggerFactory
instanceof
LoggerContext
)
{
return
ConditionOutcome
.
match
(
message
.
because
(
"ILoggerFactory is a Logback LoggerContext"
));
}
return
ConditionOutcome
.
noMatch
(
message
.
because
(
"ILoggerFactory is an instance of "
+
loggerFactory
.
getClass
().
getCanonicalName
()));
}
}
}
spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationWithLog4j2AndLogbackTests.java
0 → 100644
View file @
c4c50b7c
/*
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
.
metrics
;
import
io.micrometer.core.instrument.binder.logging.LogbackMetrics
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport
;
import
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportMessage
;
import
org.springframework.boot.test.context.runner.ApplicationContextRunner
;
import
org.springframework.boot.testsupport.runner.classpath.ClassPathOverrides
;
import
org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link MetricsAutoConfiguration} when both Log4j2 and Logback are on the
* classpath.
*
* @author Andy Wilkinson
*/
@RunWith
(
ModifiedClassPathRunner
.
class
)
@ClassPathOverrides
({
"org.apache.logging.log4j:log4j-core:2.9.0"
,
"org.apache.logging.log4j:log4j-slf4j-impl:2.9.0"
})
public
class
MetricsAutoConfigurationWithLog4j2AndLogbackTests
{
private
final
ApplicationContextRunner
contextRunner
=
new
ApplicationContextRunner
()
.
withConfiguration
(
AutoConfigurations
.
of
(
MetricsAutoConfiguration
.
class
));
@Test
public
void
doesNotConfigureLogbackMetrics
()
{
this
.
contextRunner
.
run
((
context
)
->
{
System
.
out
.
println
(
new
ConditionEvaluationReportMessage
(
ConditionEvaluationReport
.
get
((
ConfigurableListableBeanFactory
)
context
.
getAutowireCapableBeanFactory
())));
assertThat
(
context
).
doesNotHaveBean
(
LogbackMetrics
.
class
);
});
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment