开发应用时,日志框架的依赖是不可避免的。应用依赖的其余框架中,可能又依赖了其余不一样的框架,例如你的应用使用的Logback,但Spring系列框架使用的Log4j,还有某某框架依赖的Commons Logging等等。还好有Self4j这个桥接“神器”,能够完成不一样日志框架的整合,实现大一统的局面。html
上述的内容,开发应用时配置过日志的人,确定不会陌生。笔者在开发Spring MVC项目时主要使用的Logback+Self4j。既然要使用Spring Boot,结合以往的工做经验,天然须要了解其日志配置。java
Spring Boot内部日志系统使用的是Commons Logging,但开放底层的日志实现。默认为会Java Util Logging, Log4J, Log4J2和Logback提供配置。每种状况下都会预先配置使用控制台输出,也可使用可选的文件输出。git
默认状况下,若是你使用'Starter POMs',那么就会使用Logback记录日志。为了确保那些使用Java Util Logging,Commons Logging,Log4J或SLF4J的依赖库可以正常工做,正确的Logback路由也被包含进来。也就说,如今你的项目日志工做统一交由Logback来作,即便依赖库使用了其余的日志,没有关系,私下都会“转交”Logback,按照Logback配置的输出方式,统一记录和输出。spring
Spring Boot应用默认只在控制台输出,默认ERROR,WARN和INFO级别的信息会被记录。若是想在控制台输出DEBUG级别的日志信息,可使用命令行“java -jar xxx.jar --debug”服务器
使用过日志,咱们都知道日志记录是能够指定格式的,包括日志级别、时间、日志名、线程ID等等。Spring Boot默认有一套本身的日志格式以下所示,固然你也能够经过自定义来覆盖其默认格式。app
Spring的日志不只仅局限于控制台,能够输出至日志文件。只须要在classpath下的application.properties里设置logging.file或logging.path属性便可。框架
**ps:**之因此推荐绝对路径,是由于笔者之前工做时使用的Logback配置文件中,日志文件路径使用的是相对路径,可部署到Linux服务器时,并不是在预想的位置输出,而是在三个位置都有日志的存在,排查日志时形成了很大的阻碍,后来改成绝对路径修复了问题。spring-boot
Spring Boot的默认配置,日志文件每达到10M就会被轮换(分割),和控制台同样,默认记录ERROR, WARN和INFO级别的信息。spa
能够在application.properties里添加“logging.level.*=xxx”的方式,来修改Spring Boot日志输出的级别。.net
#控制root logger的日志级别为WARN以上 logging.level.root=WARN #控制org.springframework包下的日志级别为DEBUG以上 logging.level.org.springframework=DEBUG #控制org.hibernate包下的日志级别为ERROR logging.level.org.hibernate=ERROR
以前笔者在使用logback.xml时,其中的一段配置与上述配置是等效的。
<logger name="org.springframework" level="DEBUG" /> <logger name="org.hibernate" level="ERROR" /> <root level="WARN"></root>
能够看到咱们既能够配置默认的root日志级别,也能够细化控制某些类库的日志级别。
自定义Spring Boot应用的日志配置很简单,默认只须要将日志的标准配置文件放入classpath下便可。也能够在application.properties文件中设置logging.config属性来指定自定义配置文件。因为笔者以前工做一直采用的是Logback,因此使用以前所用的logback.xml就能够修改日志级别控制、日志输出格式、日志文件输出等等。传送门
并且在应用的平常维护中,将日志文件按级别分开输出更有利。而Spring Boot默认是将全部级别的日志所有输出在一个文件里,笔者认为不妥,因此笔者更倾向于自定义配置。笔者已在公开的示例代码中添加了以前经常使用的logback配置文件,可供参考。传送门
上面的描述中,不少处提到使用配置的属性值来修改Spring Boot的日志行为。其实日志的初始化要早于应用的ApplicationContext建立,那么咱们自定义的属性经过@PropertySources注解引入是不被感知的。此时只有系统属性和Spring Boot特定的具有扩展性的特殊属性文件(例如application.properties)才能被感知。应该是加载时机不一样吧。
即便是自定义配置,Spring Boot也为咱们提供了方便。经过将一些Spring Environment载入的配置属性转换到系统属性中,咱们能够在自定义的日志配置文件里引用这些属性值。传送门
看开发指南,Spring Boot推荐使用Logback日志的扩展配置功能。只须要将logback.xml命名为logback-spring.xml,就能够享受其扩展功能。传送门
主要提供了两个功能扩展: