1. 目前的日志框架有:
日志的抽象层 | 日志的实现 |
---|---|
JCL(Jakarta Commons Logging),jboss-logging,SLF4j(Simple Logging Facade for Java) | JUL(java.util.logging),Log4j,Log4j2,Logback |
用的是时候要选择一个日志抽象层和一个日志的实现, 推荐使用slf4j+logback
Spring框架默认使用JCL
SpringBoot选用SLF4j和Logback
2. SLF4j使用
2.1 如何使用SLF4j
开发的时候日志记录方法的调用不应该直接调用日志的实现类,而是调用日志抽象层里面的方法
用的时候要要入slf4j和logback的jar包
//导入slf4j的类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
slf4j与各个日志实现类的用法:
注意:每个日志实现框架都有自己的配置文件。使用slf4j以后,配置要根据日志实现框架的写
2.2 如何该现有的系统的日志实现框架
现在各中技术框架底层的日志都不一样,比如Spring(commons-logging)、Hibernate(jboss-logging)…
那当使用其他技术框架时怎么样统一使用slf4j进行日志管理呢?
如以下slf4j官网图片所示:要使用slf4j的一些中转的jar,比如jcl-over-slf4j.jar会把底层框架中的jcl中的方法实现切换成slf4j去实现
统一系统中所有日志到slf4j需要做以下步骤:
- 讲系统中其他日志框架先exclude(比如exclude jcl)
- 用slf4j提供的中间转换jar替换原有的日志框架(比如导入jcl-over-slf4j.jar)
- 导入slf4j其他的实现(比如我们用的logback)
3. SpringBoot日志
- SpringBoot底层使用slf4j+logback的方式进行日志记录
- SpringBoot会把其他日志都替换成slf4j
SpringBoot能自动适配所有的日志,而且底层使用的时slf4j+logback的方式记录日志。引入其他框架的时候,只需要把这个框架的日志依赖排除掉。
SpringBoot会加载以下log的配置文件,但是推荐使用*-spring.xml的配置文件。因为不带-spring的logback.xml, 会被日志框架直接读取。而logback-spring.xml会被SpringBoot读取并解析,可以使用SpringBoot的高级Profile功能
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |