02.SpringBoot 日志配置
- 前言
- 一、slf4j、Commons Logging、log4j、logback的区别
- 1、slf4j(Simple Loging Facade For Java)
- 2、Commons Logging
- 3、log4j (Log for Java)与ogback
- 二、SpringBoot 关于日志的常用配置
- 1、日志文件输出
- 2、关于logback的扩展
前言
不知道有没有人和我一样对sl4j、Commons Logging、log4j、logback傻傻分不清楚的。下面将将浅浅的聊一下他们的区别,然后在说一下Spring Boot关于日志的一些常用配置。
一、slf4j、Commons Logging、log4j、logback的区别
1、slf4j(Simple Loging Facade For Java)
slf4j是为各种日志架构(如java.util.loging,logback,log4j)提供日志输出的统一接口,并不是一个具体的日志实现方式。
从设计模式角度,slf4j用到的是适配器模式(适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。),类似于使用mybatis时候,不需要关注连接的数据库是什么类型,只需要使用预先提供好的抽象接口既可以操作数据库。
2、Commons Logging
Commons Logging与slf4j功能是一样的。commons-logging是Apache实现为不同日志系统实现之间的桥梁。使用common-logging API的lib可以在运行时用于任何日志框架的实现。commonlogging,为其他的日志实现编写适配器这一项任务。
Commons Logging也是SpringBoot默认用来实现内部打印的工具包。
3、log4j (Log for Java)与ogback
log4j与logback其实是同一个作者所写的。在logback首页中是这样介绍到logback的“Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.”,我是理解为logback是log4j的升级版,官网中介绍到logback比log4j在关键执行路径上速度快大约10倍,且内存占用空间也较小。还有很多其他新功能这里就复述了,感兴趣的话可以到官网中查看。
SpringBoot 默认使用的是Logback
二、SpringBoot 关于日志的常用配置
Spring Boot使用Commons Logging进行所有内部日志记录,但是他也把底层日志接口实现方法开放给用户进行自定义。Spring Boot 提供了java.util.Logging,Log4j2和logback的默认配置。
默认情况下,Spring Boot使用Logback做为日志记录系统。
1、日志文件输出
默认情况下,Spring Boot日志只输出到控制台,而不会输出到文件中。如果我们需要将日志写到文件中的话,需要在application.yml中配置logging.file.name或者logging.file.path两个属性.
属性名称 | 例子 | 描述 |
logging.file.name | my.log | 将日志写到my.log文件中,这个属性值可以是一个确切的位置或相堆路径。 |
logging.filepath | /var/log | 将日志写到spring.log到/var/log目录下。 |
2、关于logback的扩展
我们可以创建logback-spring.xml来配置关于logback的一些扩展内容。下面一个是logback-spring.xml的示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入SpringBoot默认配置 -->
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="TRACE" />
<!-- 开发、测试环境 -->
<springProfile name="dev,test">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO" />
<logger name="com.gxfs" level="DEBUG" />
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="org.springframework.web" level="ERROR"/>
<logger name="org.springboot.sample" level="ERROR" />
<logger name="com.gxfs" level="ERROR" />
</springProfile>
</configuration>
说明
- 1)、springProfile 标签用于区分环境
- 2)、logger标签 用来设置某一个包或具体的某一个类的日志打印级别
- 3)、 引入SpringBoot的默认配置,这里我们看一下base.xml的源码
<included>
<!-- 再次引入默认配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!-- 设置了日志文件属性,默认是输出到spring.log中 -->
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<!-- 再次引入控制台默认配置 -->
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<!-- 再次引入文件默认配置 -->
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
由此可以看到Spring Boot关于logback是提供了一系列默认配置,包括日志文件的Rotation等,
暂时告一段落先,// TODO 若有时间将继续完善几个xml的源码的解读。