Files
rikako-note/spring/log/log.md
2022-09-21 15:39:19 +08:00

4.9 KiB
Raw Blame History

Spring Logging

Log Format

默认Spring Boot输出日志的格式如下

2022-08-18 05:33:51.660  INFO 16378 --- [           main] o.s.b.d.f.s.MyApplication                : Starting MyApplication using Java 1.8.0_345 on myhost with PID 16378 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2022-08-18 05:33:51.664  INFO 16378 --- [           main] o.s.b.d.f.s.MyApplication                : No active profile set, falling back to 1 default profile: "default"
2022-08-18 05:33:53.907  INFO 16378 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-08-18 05:33:53.939  INFO 16378 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-08-18 05:33:53.939  INFO 16378 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-08-18 05:33:54.217  INFO 16378 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-08-18 05:33:54.217  INFO 16378 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2343 ms
2022-08-18 05:33:55.396  INFO 16378 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-08-18 05:33:55.640  INFO 16378 --- [           main] o.s.b.d.f.s.MyApplication                : Started MyApplication in 5.456 seconds (JVM running for 6.299)
  • 日期与时间 精度为ms
  • log level ERROR, WARN, INFO, DEBUG, TRACE
  • 进程ID
  • 线程名称 [main]
  • logger name : 输出日志类的类名(通常为缩写)
  • log信息

控制台输出

默认情况下log日志信息会回显输出到console中默认ERROR, WARN, DEBUG三个级别的信息将会被日志输出。
可以通过--debug选项来启用“debug”模式

java -jar xxx.jar --debug

通过在application.properties中指定debug=true也可以开启“debug”模式

debug=true

当“debug”模式被开启后一部分核心的logger内嵌容器、Hibernate、SpringBoot将会被配置输出更多的信息。

开启debug模式并不意味着输出所有日志级别为Debug的信息

同样,也可以通过--trace或者在properties中指定trace=true来开启trace模式

文件输出

默认情况下Spring Boot只会将日志输出到console中如果想要额外定义将日志输出到文件中需要在application.properties中定义logging.file.name或者logging.file.path

logging.file.name logging.file.path example description
(none) (none) 只在控制台输出
特定文件 (none) my.log 特定log文件路径可以是绝对路径或相对路径
(none) 特定目录 /var/log 将日志输出到该路径下的spring.log文件可以是绝对路径或相对路径

当log文件大小到达10MB时将会旋转重写和console log一样log文件也会输出ERROR, WARN和INFO

logging properties和实际的logging机制是相互独立的因而特定的配置属性如logback.configurationFile)并不由SpringBoot管理

File Rotation

如果使用的是Logback则可以在application.properties中定义file rotation行为。

Name Description
logging.logback.rollingpolicy.file-name-pattern 定义创建log归档的命名模式
logging.logback.rollingpolicy.clean-history-on-start 定义是否应该在项目启动时清理历史日志
logging.logback.rollingpolicy.max-file-size 定义日志在归档前的最大大小
logging.logback.rollingpolicy.total-size-cap 日志归档在被删除前可以占用的最大大小
logging.logback.rollingpolicy.max-history 要保留归档日志文件的最大数量

Log Level

所有的日志系统都可以通过Application.properties定义logging.level.<logger-name>=<level>来定义事务级别事务级别可以是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF。
可以通过logging.level.root来定义root logger的隔离级别。

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

Log Group

可以通过log group将关联的logger组合在一起并且对log group统一指定日志级别。

# 定义一个名为“tomcat”的log group
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat

# 为名为“tomcat”的log group统一指定log level
logging.level.tomcat=trace

Spring Boot具有如下先定义好的log group可以开箱即用

  • web org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans
  • org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener