一、springboot默认日志框架
我们先查看一下springboot项目的日志jar包依赖
可以看出来boot项目默认使用的日志框架是logback,日志门面接口是slf4j,我们在项目中使用的是slf4j日志,底层的实现是可以自由选择的,比如log4j,java.util.logging,appache-commons-logging,使用统一的日志接口,这样项目切换日志架构就比较方便,图中log4j-to-slf4j是将log4j日志转为slf4j。
二、springboot日志架构的切换
接下来介绍日志框架的切换,以logback切换成log4j为例,我们看一下springboot官方提供的日志使用图
查看右上角的流程,可以看出,我们面向slf4j-api.jar编程,底层使用log4j.jar的日志实现,中间通过slf4j-log4j.jar适配器联调实现与接口,这样就实现了日志框架的切换,但是项目中如果有其他日志框架的实现,比如commons-logging.jar,这样启动项目时就会报错,也要替换成相应的转为slf4j的jar包,这样日志框架就统一了。
三、springboot的默认配置(日志级别、日志格式、日志文件)
@RunWith(SpringRunner.class)
@SpringBootTest
public class ConfigurationLoadingOrderApplicationTests {
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
springboot的日志级别是trace<debug<info<warn<error,如果不在配置文件中修改日志级别,默认就是info,trace和debug级别是不在控制台打印的,在配置文件中配置 logging.level.com.example=trace 即可修改日志级别,level后面是要修改级别的包名
日志格式的代表含义如下文介绍,我们可以在配置中通过属性logging.pattern.console和logging.pattern.file来修改控制台和文件中的日志格式,比如%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
至于默认日志文件位置,如果我们不配置logging.path和logging.file则默认不在日志文件中输出,可以通过配置这个属性将日志打印在文件中
指定的是文件路径,对文件名称不起作用,文件名默认spring.log
logging.path=D:/mylog/wp.log
可以指定文件路径和名称
logging.file = D:/wp.log
值得注意的地方是这两个属性是互斥属性,只能配置一个,同时配置了两个只有logging.file生效