SpringBoot 日志记录
简介
Spring 使用
commons-loggin
作为内部日志,但底层日志实现是开放的,可对接其它日志框架。支持
jul
、log4j2
、logback
等。SpringBoot 提供了默认的控制台输出配置,也可以配置日志输出为文件。SpringBoot 默认使用的是
logback
。
日志配置
每个starrer场景,都会导入一个核心场景spring-boot-starter。
核心场景引入了日志的所有功能spring-boot-starter-logging。
默认使用logback+slf4j组合作为默认底层日志
日志是系统一启动就要用,xxxAutoConfiguration是系统启动好了以后放好的组件,后来用的。
日志是利用监听器机制配置好的,ApplicationListener。
日志所有的配置都可以通过修改配置文件实现。以loggin开始的所有配置。
日志格式
注意:logback
没有FATAL
级别,对应的是ERROR
。
# 控制台日志输出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} ==> %msg%npro
我们会发现自定义的没颜色,SpringBoot的默认日志为我们设置了颜色等更多的配置。
我们也可以单独来设置日志的输出时间格式
# 日志时间格式
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS
记录日志
@RestController
public class UserController {
Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping("/user")
public String getUser() {
logger.info("user info");
return "Hello Spring Boot!";
}
}
日志级别
由低到高:
ALL < TRACE < DEBUG < INFO < WARN < EROR < FATAL < OFF
ALL:打印所有日志。
TRACE:追踪框架详细流程日志,一般不使用。
DEBUG:开发调试细节日志。
INFO:关键、感兴趣日志。
WARN:警告信息。
ERROR:业务错误日志,记录各种异常。
FATAL:致命错误,比如jvm系统奔溃。
OFF:关闭所有日志记录
不指定级别的所有类,都使用root
指定的级别作为默认级别,SpringBoot日志的默认值级别是INFO。
在application.properties
中配置loggin.level.<logger-name>=<level>
指定日志级别
# root logger
logging.level.root=info
# mybatis logger
logging.level.com.github.pagehelper=info
# controller logger
logging.level.com.example.demo.controller=info
日志分组
将相关的logger
分组在一起,统一配置。例如:Tomcat相关日志统一设置
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
logging.level.tomcat=trace
SpringBoot预定义两个组
web
org.springframework.core.codec, org.springframework.http, org.springframework.web
, org.springframework.boot.actuate.endpoint.web
, org.springframework.boot.web.servlet.ServletContextInitializerBeans
sql
org.springframework.jdbc.core
,
org.hibernate.SQL
,
org.jooq.tools.LoggerListener
文件输出
SpringBoot默认只是把日志写在控制台,如果想要额外记录到文件,可以在application.properties添加logging.file.name或logging.file.path配置。
未指定
未指定
仅控制台输出
指定
未指定
my.log
写入文件
未指定
指定
/var/log
写入指定目录,文件名为spring.log
指定
指定
以loggin.file.name为准
文档归档与滚动切割
归档:每天的日志单独存到一个文档中。
切割:每个文件10MB,超过大小切割成另外一个文件。
每天的日志应单独分割出来存档,如果使用logback,可以通过application.yaml文件指定规则。
如果是其它日志系统,需自行配置(添加log42.xml或log4j-spring.xml)
# 日志的文件名格式,默认为:${LOG_FILE}.%d{yyyy-MM-dd}.log
logging.logback.rollingpolicy.file-name-pattern=logs/rolling.%d{yyyy-MM-dd}.%i.gz
# 日志保存的天数,默认为值为7
logging.logback.rollingpolicy.max-history=30
# 日志文件的最大大小,默认为:10MB
logging.logback.rollingpolicy.max-file-size=10MB
# 日志文件的总大小默认为:0,即不限制
logging.logback.rollingpolicy.total-size-cap=1GB
切换日志组合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 首先排除 SpringBoot 自带的日志包-->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j2 日志包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2
支持yaml和json格式的配置文件
YAML
com.fasterxml.jackson.core:jackson-databind + com.fasterxml.jackson.dataformat:jackson-dataformat-yaml
log4j2.yaml + log4j2.yml
JSON
com.fasterxml.jackson.core:jackson-databind
log4j2.json + log4j2.jsn
最佳实践
导入任何第三方框架之前,首先要排除它的日志包,因为SpringBoot底层控制好了日志。
修改
application.properties
配置文件,就可以调整日志的所有行为。甚至可以编写日志框架自己的配置文件放在类路径下就行,比如logback-spring.xml
,log4j2-spring.xml
如需对接专业日志系统,只需要把
logback
记录的日志灌到kafka
之类的中间接。
最后更新于
这有帮助吗?