Logback-классические пакеты Конфликт между Slf4jTest (lidalia) и Springboot - PullRequest
1 голос
/ 28 октября 2019

При использовании SLF4J Test с Springboot правильно понимается, что SLF4J может создавать только неперекрывающиеся пакеты. Таким образом, пакет Springboot SLF4J, такой как logback-classic, должен быть исключен для целей тестирования, как показано в следующем фрагменте.

            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency> 

       <!--  slf4j-test  -->
        <dependency>
            <groupId>uk.org.lidalia</groupId>
            <artifactId>slf4j-test</artifactId>
            <version>1.1.0</version>
            <scope>test</scope>
        </dependency>


При ручном запуске тестовых случаев все работает нормально, и тест проходит успешно. Но для того, чтобы собрать и выпустить весь проект, кажется, что мой springboot не может работать, как показано ниже при работе с mvn spring-boot:run

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.7.RELEASE)

Oct 28, 2019 2:30:04 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
Oct 28, 2019 2:30:04 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.22]
Oct 28, 2019 2:30:04 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring embedded WebApplicationContext

Похоже, что есть некоторое противоречие. Когда я включил logback-класс обратно в springboot-starter, тогда я смогу запустить весь проект, но провалил тест (из-за дубликатов logback-classic). Но тест не пройден, и он в основном не пройдёт, потому что getLoggingEvents моего TestLogger возвращает null вместо чего-либо (также из-за дубликатов logback-класса (см. Ниже))

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/user.local/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/user.local/.m2/repository/uk/org/lidalia/slf4j-test/1.1.0/slf4j-test-1.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

Любой комментарийна этом? Или я что-то пропустил?

...