文章目录
- 背景
- slf4j的引入
- 报错解决
背景
在项目中引入log4j时,首先考虑项目中所用到的框架的日志本身对log4j的兼容性,为此需要引入一个各种日志的抽象层slf4j,该抽象层使得你无论在项目中用什么日志框架,都可以很好的与项目中其他框架的日志兼容。所以,如果我们要使用log4j作为项目的日志框架,那么为了和项目中其他的框架的日志兼容,我们需要引入slf4j-api以及slf4j-log4j12。
slf4j的引入
<!-- /artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
<!-- /artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.0-alpha1</version>
<scope>test</scope>
</dependency>
报错解决
此时启动项目,开头就报错
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http:///#noProviders for further details.
根据提示阅读文档 http:///#noProviders 可知,slf4j在1.8.0之后的机制不一样了,所以我们换一个1.8.0之前的版本试一下
slf4j-api换成1.7.30后重新启动项目
SLF4J: Failed to load class "org.".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http:///#StaticLoggerBinder for further details.
可以看到,刚才的错误解决了,又遇到一个新的错误,继续根据给的文档进行查找问题 http:///#StaticLoggerBinder
可以看到,无论是第一个错误还是第二个错误,都是依赖版本的问题,官方在Jdk1.9开始对于slf4j-api以及其他如slf4j-log4j12等依赖的绑定机制不同了,Jdk1.9对应slf4j-api以及slf4j-log4j12的版本从1.8.0开始。所以,为了解决以上两个问题,(如果我们使用的是Jdk1.8及以下)我们可以直接降低这两个依赖的版本到1.8.0以下,或者升级为Jdk1.9再使用这两个依赖的版本为1.8.0以上。
<!-- /artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!-- /artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
<!-- <scope>test</scope>-->
</dependency>
!!!特别注意:以上slf4j-log4j12的scope要么直接去掉,要么改为compile,因为test代表只有在测试(@Test)的时候该依赖才起作用。