SpringBoot2.1.5(16)--- Spring Boot的日志详解
SpringBoot2.1.5(16)--- Spring Boot的日志详解
市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons Logging), Log4j, Log4j2, Logback、 SLF4j、 jboss-logging等等。
Spring Boot 2.*默认采用了slf4j+logback的形式 ,slf4j是个通用的日志门面,logback就是个具体的日志框架了,我们记录日志的时候采用slf4j的方法去记录日志,底层的实现就是根据引用的不同日志jar去判定了。所以Spring Boot也能自动适配JCL、JUL、Log4J等日志框架,它的内部逻辑就是通过特定的JAR包去适配各个不同的日志框架。
日志格式
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine :
Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] :
Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader :
Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean :
Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean :
Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
日志包含输出以下信息:
- 日期和时间:毫秒精度,易于排序。
- 日志级别:错误、警告、信息、调试或跟踪。
- 进程ID。
- A---分隔符,用于区分实际日志消息的开始。
- 线程名称:括在方括号中(可能会因控制台输出而被截断)。
- log名称:这通常是源类名(通常缩写)。
- 日志消息。
logback没有致命级别FATAL.级别最高为错误ERROR。
添加日志依赖
假如maven依赖中添加了spring-boot-starter-logging
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
但是呢,实际开发中我们不需要直接添加该依赖。
你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。工程中有用到了Thymeleaf,而Thymeleaf依赖包含了spring-boot-starter,最终我只要引入Thymeleaf即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
控制台输出
默认的日志配置会在消息写入时将其回送到控制台。默认情况下,会记录错误级别、警告级别和信息级别的消息。您还可以通过启动
您的应用程序带有--debug标志。
$ java -jar myapp.jar --debug
也可以通过在application.properties. 文件中设置debug=true来输出日志。
启用调试模式时,选择核心log(嵌入式容器、Hibernate和SpringBoot)配置为输出更多信息。启用调试模式不配置
您的应用程序将以调试级别记录所有消息。或者,您可以通过使用--trace标志启动应用程序来启用“跟踪”模式(或
trace=true(在application.properties中)。这样做可以为以下选项启用跟踪日志记录:
核心log(嵌入式容器、Hibernate模式生成和整个Sprin*品组合)
日志级别从低到高分为:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
如果设置为 WARN ,则低于 WARN 的信息都不会输出。
Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台。
如果每次都写这行代码会很麻烦,可以使用注解,但是需要使用lombok:
添加依赖:
//注解
compile 'org.projectlombok:lombok:1.16.18'
安装 lombok 的插件:
Go to File > Settings > Plugins
Click on Browse repositories…
Search for Lombok Plugin
Click on Install plugin
Restart Android Studio
允许注解处理,Settings -> Compiler -> Annotation Processors
可以使用{} 占位符来拼接字符串,而不需要使用““+””来连接字符串。
日志颜色
如果终端支持ANSI,则颜色输出用于帮助可读性。你可以设定spring.output.ansi.启用为支持的值,以覆盖自动检测。
颜色编码是使用%clr转换字配置的。在最简单的形式中,转换器颜色根据日志级别的输出,如下例所示:
%clr(%5p)
日志颜色设置:
或者,可以通过将其作为选项提供给转换。例如,要使文本变为黄色,请使用以下设置:
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
这种方式支持下面的颜色
• blue
• cyan
• faint
• green
• magenta
• red
• yellow
日志文件输出
默认情况下,Spring引导只记录到控制台,不写入日志文件。如果你想写日志文件除了控制台输出之外,还需要设置logging.file或logging.path属性(用于例如,在您的application.properties中)。
下表显示了如何将logging.*属性一起使用:
如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性。
logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。
如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log
注:二者不能同时使用,如若同时使用,则只有logging.file生效
默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO
级别控制
所有支持的日志记录系统都可以在Spring环境中设置记录级别(例如在application.properties中)
格式为:'logging.level.* = LEVEL'
logging.level:日志级别控制前缀,*为包名或Logger名
LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
root log 可以使用logging.level.root进行配置。
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
自定义日志配置
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。
默认的命名规则,并且放在 src/main/resources 下面即可
如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,application.yml可以通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日志配置,这个功能会很有用。
一般不需要这个属性,而是直接在logback-spring.xml中使用springProfile配置,不需要logging.config指定不同环境使用不同配置文件。springProfile配置在下面介绍。
推荐阅读
-
详解Spring boot/Spring 统一错误处理方案的使用
-
Spring Boot日志控制详解
-
Spring Boot整合Swagger2的完整步骤详解
-
登陆验证码kaptcha结合spring boot的用法详解
-
Spring Boot 验证码的生成和验证详解
-
spring boot 项目利用Jenkins实现自动化部署的教程详解
-
详解基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案
-
Spring boot中@Conditional和spring boot的自动配置实例详解
-
Spring Boot 配置随机数的技巧代码详解
-
详解Spring boot/Spring 统一错误处理方案的使用