LoggerFactory不是Logback LoggerContext,但Logback在类路径上

时间:2015-06-11 22:06:21

标签: java logging spring-security spring-boot dependency-management

我认为spring-boot-starter-security中的一些模块与log4j冲突,但我不知道哪一个。

我的依赖关系如下:

compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-security"){
    exclude module: "spring-boot-starter-logging"
}

compile "org.apache.logging.log4j:log4j-api"
compile "org.apache.logging.log4j:log4j-core"
compile "org.apache.logging.log4j:log4j-slf4j-impl"
compile('org.apache.poi:poi:3.10.1')
compile('org.apache.poi:poi-ooxml:3.10.1')
testCompile("junit:junit")

6 个答案:

答案 0 :(得分:9)

我的问题继续:删除Logback或从log4j-slf4j-impl-2.12.0.jar加载的竞争实现类org.apache.logging.slf4j.Log4jLoggerFactory

我添加了

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        exclude group: 'ch.qos.logback', module: 'logback-classic'
        exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j'
    }
}

到我的gradle.build并用最新版本刷新了所有项目依赖项,并解决了问题。

答案 1 :(得分:8)

我想出了

compile("org.springframework.boot:spring-boot-starter-security"){
    exclude module: "spring-boot-starter-logging"
    exclude module: "logback-classic"
}
compile("org.springframework.boot:spring-boot-starter-thymeleaf"){
    exclude module: "logback-classic"
}

答案 2 :(得分:8)

maven的相同解决方案:

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

答案 3 :(得分:4)

使用IDEA&#34;显示依赖关系&#34;或mvn dependency:tree -Dverbose查找所有logback-classic jar文件,并将其排除。

答案 4 :(得分:0)

对我来说,这个问题仅在执行maven-surefire-plugin期间出现。即使不将Logback添加到项目依赖项中,也不难在类路径上找到Logback。我添加了这样的修复程序:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>${maven-surefire-plugin.version}</version>
     <configuration>
        <systemPropertyVariables>
            <org.springframework.boot.logging.LoggingSystem>
                org.springframework.boot.logging.log4j2.Log4J2LoggingSystem
            </org.springframework.boot.logging.LoggingSystem>
        </systemPropertyVariables>
    </configuration>
</plugin>

您也可以使用

mvn clean install -Dorg.springframework.boot.logging.LoggingSystem=org.springframework.boot.logging.log4j2.Log4J2LoggingSystem

答案 5 :(得分:0)

根据 this bug 的说法,捆绑且不可删除的 Kotlin 插件(让我想起了 iOS 强制包含 U2 的专辑)包括 org.gradle.kotlin.kotlin-dsl,这反过来会用不兼容的日志记录库污染类路径(即使已禁用)。

我通过在首选项中将跑步者从“IntelliJ IDEA”更改为“Gradle”解决了这个问题:

  • 构建、执行、部署
    • 构建工具
      • 摇篮
        • 使用 -> Gradle 构建运行
        • 使用 -> Gradle 运行测试