- 日志框架
市面上的日志框架:JUL、JCL、Jboss-logging、log4j、log4j2、slf4j...
Spring底层使用JCL;
SpinrgBoot选用的是SLF4j和logback。
- SLF4j 使用
日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法

来自slf4j官网

来自slf4j官网
2.1 如何将系统中所有的日志都统一到SLF4j
- 将系统中其他日志框架下排除出去;
- 用中间包来替换原有的日志框架;
- 导入SLF4j其他的实现
2.2 SpringBoot中日志关系
SpringBoot使用它来做日志功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐logging</artifactId>
</dependency>

SpringBoot底层日志依赖关系
由上图依赖关系可知,SpringBoot底层是使用slf4j+logback的方式记录日志,也把其他的日志都替换成了slf4j,因此能自动适配所有的日志。如果SpringBoot需要引入其他日志框架,那么只需要把这个框架依赖的日志框架排除掉即可;
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐core</artifactId>
<exclusions>
<exclusion>
<!- 此处就是排除掉底层你想引入的日志框架->
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
2.3 SpringBoot中默认使用Logback来记录日志,日志级别有六种,从低到高分别是:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
。
如果设置为 WARN ,则低于 WARN 的信息都不会输出。
Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台
2.4 在SpringBoot中的日志使用:
2.4.1 默认配置
SpringBoot默认帮我们配置好了日志;
Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void contextLoads() {
logger.trace("aaaaaaa");
logger.debug("bbbbbb");
logger.info("ccccccc");
logger.warn("ddddddddd");
logger.error("eeeeeeee");
}
2018-08-10 09:30:26.152 INFO 15292 --- [ main] c.e.s.SpringbootDemoApplicationTests : ccccccc
2018-08-10 09:30:26.152 WARN 15292 --- [ main] c.e.s.SpringbootDemoApplicationTests : ddddddddd
2018-08-10 09:30:26.152 ERROR 15292 --- [ main] c.e.s.SpringbootDemoApplicationTests : eeeeeeee
由输出结果可知,默认的打出日志级别是info,因此info以下的都没有日志输出。
可以在配置文件中修改:
#指定日志的
logging.level.com.example = trace
# logging.path =
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径
# logging.file = F:/springboot.log
# 在当前磁盘的路径下创建spring文件夹和里层的log文件夹;使用spring.log作为默认文件
#logging.path=/spring/log
#在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd}-[%thread]-%-5level-%logger{50}---%msg%n
#指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd}-===-[%thread]===%-5level===%logger{50}====%msg%n
2.4.2 指定配置
给类路劲下放上每个日志框架自己的配置文件即可,这样SpringBoot就不会使用默认的配置文件了。
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 |
logback.xml : 直接就被日志框架所识别
logback-spring.xml:日志框架不能直接加载日志的配置项,用SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能
2.5 切换日志框架
若想切换日志框架为log4j2,只需要在pom文件中,做如下修改,首先去掉 log4j-over-slf4j,再加入log4j2的依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring‐boot‐starter‐logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐log4j2</artifactId>
</dependency>