Files
rikako-note/spring/log/log.md
2022-10-12 19:50:23 +08:00

86 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- [Spring Logging](#spring-logging)
- [Log Format](#log-format)
- [控制台输出](#控制台输出)
- [文件输出](#文件输出)
- [File Rotation](#file-rotation)
- [Log Level](#log-level)
- [Log Group](#log-group)
# Spring Logging
## Log Format
默认Spring Boot输出日志的格式如下
```console
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”模式
```shell
java -jar xxx.jar --debug
```
通过在application.properties中指定debug=true也可以开启“debug”模式
```properties
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的隔离级别。
```properties
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
```
## Log Group
可以通过log group将关联的logger组合在一起并且对log group统一指定日志级别。
```properties
# 定义一个名为“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