日志配置
简介
- Spring 使用
commons-logging
作为内部日志,但底层日志实现是开发的,可对接其他日志框架 - 支持
jul
、log4j2
、logback
- 默认使用
logback
Springboot 如何把日志默认配置好的
1、每个 starter
场景,都会引入一个核心场景 spring-boot-starter
2、核心场景引入了日志配置 spring-boot-starter-logging
3、默认使用了 logback
+ slf4j
组合作为默认底层日志
4、日志是系统一启动就要用, xxxAutoConfiguration
是系统启动好了之后放进去的组件,因此日志是用监听器机制配置的 ApplicationListener
5、日志的所有功能都可以通过修改配置文件来实现
日志格式
shell
2024-12-26T16:35:30.770+08:00 INFO 28628 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2024-12-26T16:35:30.798+08:00 INFO 28628 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
默认输出格式:
- 时间和日期:毫秒级精度
- 日志级别:ERROR, WARN, INFO, DEBUG, or TRACE.
- 进程 ID
- ---: 消息分割符
- 线程名: 使用[]包含
- Logger 名: 通常是产生日志的类名
- 消息: 日志记录的内容
记录日志
java
Logger logger = LoggerFactory.getLogger(getClass());
logger.info("哈哈哈哈哈");
或
先在类上加 @slf4j
log.info("哈哈哈哈哈");
日志级别
默认日志级别是 info
,可以在 application.properties
中设置日志级别
properties
#默认所有日志没有精确指定级别就使用 root 的默认级别
logging.level.root=debug
#也可以精确指定某个包或者类的日志级别
logging.level.com.xxx.xxx=debug
日志分组
properties
# 将多个包分为同一个组
logging.group.xxx=com.xxx.xxx,com.xxx.xxx
# 对一个组设置日志级别
logging.level.xxx=debug
# springboot 默认为我们提供了 web 和 sql 组
logging.level.web=debug
logging.level.sql=debug
文件输出
properties
# 只写名字,默认生成在当前项目同位置的 demo.log 中
logging.file.name=demo.log
# 写名字 + 路径
logging.file.name=/opt/applog/demo.log
文件归档和自动切割
INFO
归档: 每天的日志文件单独存到一个文档中
切割: 每个文件 100MB,超过大小切割为另外一个文件
如果使用 logback
,可以通过 application
配置文件配置
yaml
logging:
logback:
rollingpolicy:
# 滚动策略配置,默认每天一个,超过单个文件最大 size 进行切割
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
# 单个日志文件的最大大小,默认为 10M
max-file-size: 10MB
# 应用启动时是否清楚以前文档,默认值 false
clean-history-on-start: false
# 日志文件被删除前,可以容纳的最大大小,默认为 0B,如果设置 1G,则磁盘存储超过1G后会删除旧日志文件
total-size-cap: 0B
# 保存的最大历史文件天数,默认为 7天
max-history: 7
file:
name: /opt/applog/my.log
使用其他日志框架
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 导入 spring-boot-starter 就近原则,优先级高于
spring-boot-starter-web 依赖的 spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 排除掉默认的日志依赖 -->
<exclusions>
<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>
最佳实战
- 导入任何第三方框架,先排除它的日志包,因为 Boot 底层控制好了日志
- 修改
application
配置文件,就可以调整日志的所有行为,如果不够可以编写日志框架配置文件放在类路径下,比如logback-spring.xml
- 如需对接专业日志系统,只需把
logback
记录的日志输入到相应的中间件,这和Springboot
没关系,都是日志框架自己的配置,修改配置文件即可 - 业务中使用
slf4j-api
记录日志