Spring Boot默认使用Slf4j日志门面和Logback日志实现,关于日志门面和日志实现的关系,可以使用以下Slf4j官网的这张图表示,日志门面是日志实现的抽象层,我们调用日志的接口时应该调用日志门面的接口
但是有时候一些框架的日志不是用slf4j的规范,这时候可以使用桥接jar包去转换,在Spring Boot整合其他框架的时候也是这么实现的,桥接的原理如下图所示
在Spring Boot中打印日志,可以使用Spring Boot默认的Slf4j接口,使用日志工厂类LoggerFactory
获取一个日志记录器对象Logger
,再用Logger
对象打印日志
@SpringBootTest
class SpringDemoApplicationTests {
private static final Logger logger = LoggerFactory.getLogger(SpringDemoApplicationTests.class);
@Test
void contextLoads() {
logger.info("info日志");
}
}
打印结果如下
Slf4j打印日志有以下五个等级
这五个等级级别由低到高,默认日志等级为info,日志输出时只会输出高于等于默认等级的日志
@SpringBootTest
class SpringDemoApplicationTests {
private static final Logger logger = LoggerFactory.getLogger(SpringDemoApplicationTests.class);
@Test
void contextLoads() {
logger.trace("trace日志");
logger.debug("debug日志");
logger.info("info日志");
logger.warn("warn日志");
logger.error("error日志");
}
}
如以上测试用例只会输出info,warn,error这三行日志
我们可以在Spring Boot的核心配置文件中配置日志的设置
配置日志等级,可以使用以下配置
logging:
level:
com.blackball: debug
这样指定的com.balckball路径下的日志输出就是debug等级
这个配置是一个map类型,我们也可以配置不同的包为不同的日志等级
logging:
level:
com.blackball.controller: info
com.blackball.service: debug
我们不仅可以在后台打印日志,还可以生成日志文件,只需要以下配置
logging:
file:
name: D:/mylog.log
运行测试用例后在指定的路径下生成了日志文件
logging.file.name
可以指定日志保存的路径和日志文件的名称,如果没有指定路径,则默认在项目的根路径中
也可以使用logging.file.path
指定日志保存的路径,但是不能指定日志文件的名称,使用默认的spring.log
logging:
file:
path: ./log
注意logging.file.name
和logging.file.path
只能配置一个
我们也可以自定义日志的输出格式,可以使用以下配置
logging:
pattern:
# 配置控制台输出格式
console: "%d{yyyy‐MM‐dd} === [%thread] === %-5level === %logger{50} === %msg%n"
# 配置日志文件输出格式
file: "%d{yyyy‐MM‐dd HH:mm:ss} - [%thread] - %-5level - %logger{50} - %msg%n"
其中格式定义中的符号含义如下
Spring Boot默认使用Slf4j日志门面和Logback日志实现,当我们想切换Log4j2作为日志实现时,只需要将Logback的jar包排除,再导入Log4j2的jar包即可
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-loggingartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-log4j2artifactId>
dependency>