我正在为我的应用程序部署spring boot可执行jar。我正在使用SLF4J日志记录,当我在IntelliJ中构建和运行时,我没有任何问题。
但是,当我尝试运行.jar时,从命令行我得到的 LoggerFactory不是Logback LoggerContext,但Logback在类路径上。
它抱怨在两个地方/opt/mapr/lib/
和/opt/mapr/hadoop/hadoop-2.7.0/share/hadoop/common/lib/
上的 slf4j-log4j12-1.7.12.jar 。
如果我从两个地方都取出罐子并运行我的应用程序:
java -cp $(mapr classpath):MapRProducerApp-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.PropertiesLauncher
由于 SLF4J,它将无法启动:无法加载类“ org.slf4j.impl.StaticLoggerBinder”。
我不明白为什么我的应用程序.jar通过
依赖项构建时无法加载slf4j类,为什么会失败 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
在IntelliJ中,我引入了/opt/mapr/lib
文件夹中存在的所有外部依赖关系,其中包括 slf4j-log4j12-1.7.10.jar ,但是IntelliJ没有提供Logback LoggerContext错误。
在这里重述:
mapr classpath
内部存在的依赖项。 mapr classpath
运行jar失败。有什么我想念的吗?我是否需要以某种方式打包我的应用程序,使其不包括SLF4J依赖项?
答案 0 :(得分:0)
我不清楚您的<dependencies>
层次结构,但是通过添加<exclusion>
您可以简单地解决冲突。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 1 :(得分:0)
如果您使用的是 Spring-boot 执行器,仅排除 spring-logging 可能无济于事。 您必须为其提供日志记录。 Spring Boot 支持 log4j 进行日志配置。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
参考:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.logging