Spring Boot学习笔记—日志

开发应用时,日志框架的依赖是不可避免的。应用依赖的其余框架中,可能又依赖了其余不一样的框架,例如你的应用使用的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

  1. 日期和时间 - 精确到毫秒, 且易于排序。
  2. 日志级别 - ERROR, WARN, INFO, DEBUG 或 TRACE。
  3. Process ID。
  4. 一个用于区分实际日志信息开头的---分隔符。
  5. 线程名 - 包括在方括号中( 控制台输出可能会被截断) 。
  6. 日志名 - 一般是源class的类名( 缩写) 。
  7. 日志信息。

Spring的日志不只仅局限于控制台,能够输出至日志文件。只须要在classpath下的application.properties里设置logging.file或logging.path属性便可。框架

  • logging.file能够明确指定日志文件的名称,建议使用绝对路径。
  • logging.path则是指明了日志文件的输出目录位置,默认文件名称为spring.log,仍是建议使用绝对路径。

**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载入的配置属性转换到系统属性中,咱们能够在自定义的日志配置文件里引用这些属性值。传送门

logback扩展

看开发指南,Spring Boot推荐使用Logback日志的扩展配置功能。只须要将logback.xml命名为logback-spring.xml,就能够享受其扩展功能。传送门

主要提供了两个功能扩展:

  1. 提供了对Spring Profile机制的支持。
  2. 提供了在配置文件里引用Spring Environment中的属性。
相关文章
相关标签/搜索