【发布时间】:2016-04-24 03:42:55
【问题描述】:
我想在 Spring Boot 项目中使用 Logback,因为它的性能和灵活性。我将 Logback 依赖项添加到 pom.xml:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
...并确保我项目中每个类中的日志记录是这样创建的:
public class MyClass {
static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
项目启动时,控制台显示如下警告:
log4j:WARN No appenders could be found for logger (org.springframework.boot.logging.ClasspathLoggingApplicationListener).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
似乎 Spring 仍在尝试使用 log4j 而不是 logback。我尝试将 logging.config=classpath:logback.xml 添加到 Spring application.properties,但并没有解决问题。
你能看出我做错了什么吗?
更新
@AliDehghani 和@chrylis 都建议log4j 被pom 中的另一个包引用。 mvn dependency:tree 的输出确认 hbase-common 是源:
com.woolford:my-project:jar:1.0-SNAPSHOT
+- org.apache.hbase:hbase-common:jar:1.1.2:compile
| [... etc ...]
| +- commons-logging:commons-logging:jar:1.2:compile
| [... etc ...]
| +- org.apache.hadoop:hadoop-common:jar:2.5.1:compile
| [... etc ...]
| | +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile
| | \- com.jcraft:jsch:jar:0.1.42:compile
| +- org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.5.1:compile
| [... etc ...]
| +- log4j:log4j:jar:1.2.17:compile
| [... etc ...]
\- org.apache.hbase:hbase-client:jar:1.1.2:compile
[... etc ...]
我尝试从hbase-common 中排除log4j(和slf4j),如下所示:
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.1.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
项目构建失败:
[ERROR] Failed to execute goal on project my-project: Could not resolve dependencies for project com.woolford:my-project:jar:1.0-SNAPSHOT: The following artifacts could not be resolved: javax.jms:jms:jar:1.1, com.sun.jdmk:jmxtools:jar:1.2.1, com.sun.jmx:jmxri:jar:1.2.1: Could not transfer artifact javax.jms:jms:jar:1.1 from/to java.net (https://maven-repository.dev.java.net/nonav/repository): Cannot access https://maven-repository.dev.java.net/nonav/repository with type legacy using the available connector factories: BasicRepositoryConnectorFactory: Cannot access https://maven-repository.dev.java.net/nonav/repository with type legacy using the available layout factories: Maven2RepositoryLayoutFactory: Unsupported repository layout legacy -> [Help 1]
我尝试将这些依赖项添加到 pom.xml,但这没有帮助。
@AliDehghani 在下面的回答中指出,Spring Boot 默认使用 Logback,因此不需要将 logback-core 和 logback-classic 添加到 pom.xml 中。我敢肯定他是100%正确的。但是,当我在 pom.xml 中注释掉 logback-core 和 logback-classic 时,我看到了几个警告,例如
log4j:ERROR Could not create an Appender. Reported error follows.
java.lang.ClassNotFoundException: ch.qos.logback.core.ConsoleAppender
【问题讨论】:
-
是否还有其他依赖项也引入了 log4j?您可能需要排除它。
标签: java spring logging logback