Spring Boot日志:
- Spring Boot通过使用Commons Logging框架作为内部日志,但是底层可以在多个日志框架之间进行切换或者集成多个框架
- 默认采用的日志框架是Logback + Log4j 的实现
- spring5以后,Commons Logging就被spring整和了,
spring-boot-starter
中也包含了日志的所有功能 - Spring Boot的日志是利用监听器配置好的,在项目启动之前就初始化了
- 在Spring Boot的配置文件中,所有以 logging 开头的配置都是日志的配置
@Slf4j
和手动导入Logger log = LoggerFactory.getLogger(getClass());
效果一样
日志门面(日志的抽象层)
- 日志的门面是为 Java 日志的访问提供了一套标准和规范的 API 框架,也就是日志的抽象层,其主要意义在于提供接口,例如:
- JCL(Jakarta Commons Logging)(2014后不再维护中)
- jboss-logging (不适合企业项目开发使用)
- SLF4j(Simple Logging Facade for Java)
日志实现
- 日志实现,简单来说就是实现日志门面(日志的抽象层)中的API接口,例如:
- Log4j
- JUL(java.util.logging)(java.util.logging 担心被抢市场推出的一种日志框架)
- Log4j2 (Apache开发的很强大的日志框架,借助了log4j的名称,但是很多框架都未适配上)
- Logback(Log4j同一个人开发的新框架,做了重大的升级)
日志格式:
- 日期和时间 : 精确到毫秒
- 日志的级别 :例如 (error、info、warn、debug、trace),Logback 没有FATAL对应的是error级别
- 进程的标识 : 可以查询该服务的具体进程
- --- : 分割线
- 线程名称 : 可以是用 [...] 框起来 利于查看
- 记录器名称 : 这通常是运行类的名称
- 日志消息
日志级别,由低到高为:
-
all :打印所有的日志
-
trace:微量,少许的意思,级别最低,一般记录了框架底层的日志,很少使用
-
debug:需要开发调试时候的关键信息打印;
-
info:普通的打印信息(默认日志级别);
-
warn:警告,不影响使用,但需要注意的问题,例如类的版本过时了
-
error:错误信息,级别较高的错误日志信息;
-
fatal:致命的,因为代码异常导致程序退出执行的事件,例如jvm系统崩溃
-
off :关闭所有的日志
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 (如果想要看到执行的sql语句,更改sql包的日志级别即可)
日志文件输出
- SpringBoot默认只把日志写在控制台,如果想额外记录到文件,可以在application.properties中添加logging.file.name或logging.file.path配置项
logging.file.name | logging.file.path | 示例 | 效果 |
---|---|---|---|
未指定 | 未指定 | 仅控制台输出 | |
指定 | 未指定 | D:\my.log | 写入指定文件。可以加路径,默认路径是项目根路径 |
未指定 | 指定 | D:\ | 写入指定目录,文件名为spring.log |
指定 | 指定 | logging.file.path无效,以logging.file.name为准 |
日志文件归档与滚动切割
- 生产环境应该配置按日志级别分类,并且进行文件归档和滚动切割,防止日志文件过大
- 归档:每天的日志单独存到一个文档中
- 切割:每个文件10MB,超过大小切割成另外一个文件
- 每天的日志应该独立分割出来存档。如果使用logback(SpringBoot默认整合),可以通过application.properties/yaml文件指定日志滚动规则,如果是其他日志系统,需要自己在日志配置文件中进行配置(添加log4j2.xml或log4j2-spring.xml)
- SpringBoot 默认支持的滚动规则设置为,所以SpringBoot 默认就支持归档和切割
配置项 | 描述 |
---|---|
logging.logback.rollingpolicy.file-name-pattern | 日志存档的文件名格式(默认值:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)。需要开启日志文件输出。LOG_FILE 就是日志输出的路径和名称 |
logging.logback.rollingpolicy.clean-history-on-start | 应用启动时是否清除以前存档(默认值:false) |
logging.logback.rollingpolicy.max-file-size | 存档前,每个日志文件的最大大小(默认值:10MB) |
logging.logback.rollingpolicy.total-size-cap | 日志文件被删除之前,可以容纳的最大大小(默认值:0B,即容纳无限大小)。设置1GB则磁盘存储超过 1GB 日志后就会删除旧日志文件 |
logging.logback.rollingpolicy.max-history | 日志文件保存的最大天数(默认值:7) |