如果是新代码建议是slf4j 因为可以通过适配器灵活适配各种日志实现
如果同时项目中老代码使用了log4j, 可以通过桥接器,适配到slf4j,然后就跟新代码使用得日志框架一致了,但是注意log4j和slf4j不要互相适配和桥接,可能出现死循环导致栈溢出
1.log4j , 2.jcl, 3jul
spring默认使用jcl 然后jcl使用jul, spring默认不适用jul, 是因为jul classloader原因无法适配log4j2,所以使用得jcl,tomcat使用得jul
如果sping想用log4j,因为无法修改spring底层实现 则需要通过 spring --> jcl--> jcl-over-slf4j --> slf4j--> log4j适配器(slf4j-log4j12)->log4j
<!-- log4j1 基础包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- slf4j 适配 log4j1.2 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.32</version>
</dependency>
<!-- log4j4基础包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<!-- slf4j 适配 log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.14.1</version>
</dependency>
springboot默认使用logback实现, 有个spring-boot-starter-logging专门打印日志,
默认通过slf4j -->logback-classic适配器 -->logback-core打印日志
tomcat -->jul -->jul-to-slf4j桥接器 -->slf4j重复第一步
log4j -->log4j-to-slf4j桥接器 --》slf4j重复第一步(可能老代码直接使用得log4j)
也可以排除spring-boot-starter-loggin(log4j1)导入 spring-boot-starter-log4j2 直接使用log4j2
使用jcl按优先级jcl实现