1. 日志
Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现,默认提供了 Java Util Logging, Log4J2, and Logback的日志实现可供选择。
Java有很多日志框架可供使用。如果这些日志选项不知道该选哪一个,请不要担心。通常,我们不需要更改日志记录依赖项,并且Spring Boot默认值可以正常工作。
1.1 日志格式
Spring Boot的默认日志输出类似于以下示例:
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: [/*]
从左到右依次是:
- Date and Time: 日期和时间
- Log Level: 日志的级别,ERROR, WARN, INFO, DEBUG, or TRACE
- Process ID:进程ID
- - - - 分隔符
- Thread name:线程名称
- Logger name: 日志名称,通常是类名
- 日志信息
Logback 没有FATAL 级别,对应的是ERROR级别
1.2 日志输出
默认情况下,ERROR-级别, WARN-级别和 INFO级别的日志会被打印出来。
如果想启用Debug模式,可以命令行下输入以下命令:
java -jar myapp.jar --debug
当然也可以在application.properties 文件中配置如下启动Debug 模式
debug=true
一旦启用了Debug 模式,那么会打印更多的信息,但是注意这里不会打印所有类库中Debug级别的日志,只会打印内嵌容器,Tomcat,Spring Boot 等
如果想要打印更多信息,可以使用
java -jar myapp.jar --trace
当然也可以在application.properties 文件中配置如下启动Debug 模式
trace=true
1.3 日志输出到文件
默认情况下,Spring Boot 只记录在控制台不输出到文件。
如果我们需要输出到日志文件中,有两种方法
1.3.1 文件输出到一个文件中
在application.properties 文件中配置如下:
logging.file=test.log
这种结果如下所示:
1.3.2 文件输出到一个文件夹下中
在application.properties 文件中配置如下:
logging.path=mylog/test/
运行后效果如下:
总结如下:
logging.file | logging.path | 例子 | 描述 |
---|---|---|---|
(none) | (none) | - | 只在控制台打印 |
特定的文件 | (none) | test.log | 写入到指定的文件中,名称可以是精确位置或相对于当前目录。 |
(none) | 特定的文件夹 | mylog/test | 将spring.log 写入到特定的文件夹中,名称可以是精确位置或相对于当前目录 |
1.3 日志打印级别
Spring Boot 支持多种日志系统的实现,设置日志打印级别可以在application.properties 中配置格式如下:
logging.level.<logger-name>=<level>
其中level为TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一
举个例子:
application.properties
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
1.4 日志组
能够将相关记录器组合在一起以便可以同时配置它们通常很有用.
了解决这个问题,Spring Boot允许您在Spring中定义日志记录组 。
application.properties
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
logging.level.tomcat=TRACE
Spring Boot包含以下预定义的日志记录组,可以直接使用:
名称 | 记录器 |
---|---|
web | org.springframework.core.codec, org.springframework.http,org.springframework.web |
sql | org.springframework.jdbc.core, org.hibernate.SQL |
1.5 自定义日志配置
日志系统 | 自定义日志配置 |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
为了帮助进行自定义,一些其他属性从Spring转移 Environment到System属性,如下表所述:
Spring Environment | 系统属性 | 备注 |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 记录异常时使用的转换字 |
logging.file | LOG_FILE | 如果已定义,则在默认日志配置中使用它。 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 最大日志文件大小(如果启用了LOG_FILE)(仅支持默认的Logback设置。) |
logging.file.max-history | LOG_FILE_MAX_HISTORY | 要保留的最大归档日志文件数(如果启用了LOG_FILE)。(仅支持默认的Logback设置。) |
logging.path | LOG_PATH | 如果已定义,则在默认日志配置中使用它。 |
logging.pattern.console | CONSOLE_LOG_PATTERN | 要在控制台上使用的日志模式(stdout)。(仅支持默认的Logback设置。) |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | 日志日期格式的Appender模式。(仅支持默认的Logback设置。) |
logging.pattern.file | FILE_LOG_PATTERN | 要在文件中使用的日志模式(如果LOG_FILE已启用)。(仅支持默认的Logback设置。) |
logging.pattern.level | LOG_LEVEL_PATTERN | 呈现日志级别时使用的格式(默认%5p)。(仅支持默认的Logback设置。) |
PID | PID | 当前进程ID(如果可能,则在未定义为OS环境变量时发现)。 |
所有受支持的日志记录系统在分析其配置文件时都可以查阅系统属性
如果要在日志记录属性中使用占位符,则应使用 Spring
Boot的语法而不是底层框架的语法。值得注意的是,如果使用Logback,则应将其: 用作属性名称与其默认值之间的分隔符,而不是使用:-。
英文原文地址:https://docs.spring.io/spring-boot/docs/2.1.2.RELEASE/reference/htmlsingle/#boot-features-Logging