Added a logging message when BeanCreationException happens; fixes gh-2136

This commit is contained in:
Marcin Grzejszczak
2022-04-13 10:31:35 +02:00
parent 22be601b89
commit c29d686a72
2 changed files with 54 additions and 2 deletions

View File

@@ -23,6 +23,9 @@ import java.util.StringJoiner;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
@@ -59,6 +62,8 @@ import org.springframework.util.StringUtils;
@EnableConfigurationProperties(SleuthWebProperties.class)
class SkipPatternConfiguration {
private static final Log log = LogFactory.getLog(SkipPatternConfiguration.class);
@Bean
@ConditionalOnMissingBean
SkipPatternProvider sleuthSkipPatternProvider(@Nullable List<SingleSkipPattern> patterns) {
@@ -84,8 +89,9 @@ class SkipPatternConfiguration {
return () -> result;
}
catch (BeanCreationException e) {
// Most likely, there is an actuator endpoint that indirectly references an
// instrumented HTTP client.
log.warn(
"Most likely, there is an actuator endpoint that indirectly references an instrumented HTTP client. An exception was thrown during bean initialization. Will ignore that exception",
e);
return () -> consolidateSkipPatterns(patterns);
}
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright 2013-2021 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
*
* https://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.cloud.sleuth.autoconfig.instrument.web;
import java.util.Collections;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenNoException;
@ExtendWith(OutputCaptureExtension.class)
class SkipPatternConfigurationTests {
@Test
void should_print_an_exception_when_bean_creation_exception_thrown(CapturedOutput output) {
SkipPatternConfiguration configuration = new SkipPatternConfiguration();
thenNoException().isThrownBy(() -> configuration.sleuthSkipPatternProvider(Collections.singletonList(() -> {
throw new BeanCreationException("BOOM!");
})));
then(output.toString()).contains(
"Most likely, there is an actuator endpoint that indirectly references an instrumented HTTP client")
.contains("org.springframework.beans.factory.BeanCreationException: BOOM!");
}
}