LoggerFactory 不是 Logback LoggerContext 但 Logback 在类路径上
LoggerFactory is not a Logback LoggerContext but Logback is on the classpath
我认为 spring-boot-starter-security 中的某些模块与 log4j 冲突,但我不知道是哪个。
我的gradle依赖如下:
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")
我想通了
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"
}
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>
使用IDEA"Show Dependencies"或mvn dependency:tree -Dverbose
查找所有logback-classic jar文件,并排除
对我来说,这个问题只在执行 maven-surefire-plugin 时出现。 Logback 以某种方式存在于 class 路径中,即使它没有添加到项目依赖项中。我添加了这样的修复:
<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
我的问题继续存在:删除 Logback 或竞争实现 class org.apache.logging.slf4j.Log4jLoggerFactory 从 log4j-slf4j-impl-2.12 加载。0.jar
我加了
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 并且还用最新版本刷新了所有项目依赖项并且问题已解决。
根据 this bug,捆绑且不可删除的 Kotlin 插件(让我想起 U2 的专辑被强制包含在 iOS 中)包括 org.gradle.kotlin.kotlin-dsl
,这反过来会污染类路径不兼容的日志库(即使禁用)。
我通过在首选项中将 运行ner 从“IntelliJ IDEA”更改为“Gradle”解决了这个问题:
- 构建、执行、部署
- 构建工具
- Gradle
- 使用 -> Gradle
构建 运行
- 运行 测试使用 -> Gradle
根据这个 documentation,Spring 由于 Web 启动器,Boot 会自动配置 Log Back 库。您应该排除 spring-boot-starter-logging 以解决此问题。
要排除 gradle 项目上的默认 LogBack 配置,
configurations {
all*.exclude module : 'spring-boot-starter-logging'
all*.exclude module : 'logback-classic'
}
我认为 spring-boot-starter-security 中的某些模块与 log4j 冲突,但我不知道是哪个。
我的gradle依赖如下:
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")
我想通了
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"
}
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>
使用IDEA"Show Dependencies"或mvn dependency:tree -Dverbose
查找所有logback-classic jar文件,并排除
对我来说,这个问题只在执行 maven-surefire-plugin 时出现。 Logback 以某种方式存在于 class 路径中,即使它没有添加到项目依赖项中。我添加了这样的修复:
<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
我的问题继续存在:删除 Logback 或竞争实现 class org.apache.logging.slf4j.Log4jLoggerFactory 从 log4j-slf4j-impl-2.12 加载。0.jar
我加了
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 并且还用最新版本刷新了所有项目依赖项并且问题已解决。
根据 this bug,捆绑且不可删除的 Kotlin 插件(让我想起 U2 的专辑被强制包含在 iOS 中)包括 org.gradle.kotlin.kotlin-dsl
,这反过来会污染类路径不兼容的日志库(即使禁用)。
我通过在首选项中将 运行ner 从“IntelliJ IDEA”更改为“Gradle”解决了这个问题:
- 构建、执行、部署
- 构建工具
- Gradle
- 使用 -> Gradle 构建 运行
- 运行 测试使用 -> Gradle
- Gradle
- 构建工具
根据这个 documentation,Spring 由于 Web 启动器,Boot 会自动配置 Log Back 库。您应该排除 spring-boot-starter-logging 以解决此问题。
要排除 gradle 项目上的默认 LogBack 配置,
configurations {
all*.exclude module : 'spring-boot-starter-logging'
all*.exclude module : 'logback-classic'
}