Spring Boot日志

时间:2024-07-15 19:10:09

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)