SpringBoot 日志系统

SpringBoot 默认使用了 SLF4J 作为日志接口,以 Logback 作为曰志的实现,当然我们也可以通过自由选择日志系统

在Spring5之后,Spring 把Apache commons-logging 日志包当成默认的日志系统,因为在系统启动时就需要使用日志,所以我们不需要引入任何关于日志的包,就可以直接使用日志功能。

 

日志格式

2023-03-31T13:56:17.511+08:00 INFO 4944 --- [ main] o.apache.cat
alina.core.StandardService : Starting service [Tomcat]
2023-03-31T13:56:17.511+08:00 INFO 4944 --- [ main] o.apache.cat
alina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.
1.7]

默认输出格式:

  • 时间和日期:毫秒级精度
  • 日志级别:ERROR, WARN, INFO, DEBUG, or TRACE.
  • 进程 ID
  • ---: 消息分割符
  • 线程名: 使用[]包含
  • Logger 名: 通常是产生日志的类名
  • 消息: 日志记录的内容

注意:logback 没有FATAL级别,对应的是ERROR

这个日志的默认格式可以参照配置文件位置:spring-boot包additional-spring-configuration-metadata.json

默认输出格式值:

%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.S
SSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magent
a} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cya
n} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

 

使用日志功能输出日志

Logger logger = LoggerFactory.getLogger(getClass());
或者使用Lombok的@Slf4j注解
log.info();

 

  • 由低到高: ALL,TRACE, DEBUG, INFO, WARN, ERROR,FATAL,OFF;
    • 只会打印指定级别及以上级别的日志
    • ALL:打印所有日志
    • TRACE:追踪框架详细流程日志,一般不使用
    • DEBUG:开发调试细节日志
    • INFO:关键、感兴趣信息日志
    • WARN:警告但不是错误的信息日志,比如:版本过时
    • ERROR:业务错误日志,比如出现各种异常
    • FATAL:致命错误日志,比如jvm系统崩溃
    • OFF:关闭所有日志记录
  • 不指定级别的所有类,都使用root指定的级别作为默认级别
  • SpringBoot日志默认级别是 INFO

 

在配置文件中指定级别

在 application.properties/yaml 中配置 logging.level.<logger-name>=<level> 指定日志级别

全局日志级别配置如下:

logging.level.root = debug

指定包的日志级别配置如下:

logging.level.cn.tzming,test.controller = debug

root 的logger-name叫root,可以配置logging.level.root=warn,代表所有未指定日志级别都
使用 root 的 warn 级别

 

日志分组

spring支持使用自定义日志分组包,即我们可以把一些希望使用同一种级别的包,编成一个组,并设置这个组的日志级别

# 设置一个abc组,组里有两个成员
logging.group.abc = cn.tzming.test.controller,cn.tzming.test.service

# 把 abc 组的日志级别设为 debug
ogging.level.abc = debug

 

SpringBoot 预定义两个组,我们也可以直接使用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默认不做日志文件输出,只在控制台输出,如果希望可以让日志输出到文件,我们可以使用日志文件功能。

添加配置:

logging.file.name
或
logging.file.path

说明:

name 已设置时,以name 选项为准,name 必须指定文件名,也可以指定路径,如果不指定路径时,则日志文件生成在包目录

path 已设置而name 未设置时,会使用path 作为文件生成路径,并生成 spring.log 文件。

pathname 同时设置时,path 会失效。

 

文件归档与切割

为了保证日志文件不会过大,我们可以让日志文件进行滚动切割,本项只适用logback日志系统

配置项:

# 日志存储的文件名格式
logging.logback.rollingpolicy.file-name-pattern
默认值
${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

# 应用启动时是否清除以前存档
logging.logback.rollingpolicy.clean-history-on-start
默认值
false

# 存档前,每个日志文件的最大大小
logging.logback.rollingpolicy.max-file-size
默认值
10MB

# 日志文件被删除之前,可以容纳的最大大小
logging.logback.rollingpolicy.total-size-cap
默认值,设置1GB则磁盘存储超过 1GB 日志后就会删除旧日志文件
0B

# 日志文件保存的最大天数
logging.logback.rollingpolicy.max-history
默认值
7

 

自定义更改日志实现系统

SpringBoot默认使用 logback 作为日志系统的实现,当然我们也可以使用其它的日志实现,如Log4j,当然,前提是实现SLF4J接口的Log4j实现。

自定义日志系统配置文件

在SpringBoot的默认日志中,可以通过修改application.yaml文件配置默认日志配置,但是如果我们使用第三方日志实现的话,就不能在yaml文件中配置了,需要另外配置文件

Logback 配置文件
logback-spring.xml,
logback-spring.groovy,
logback.xml, 
logback.groovy

Log4j2 配置文件
log4j2-spring.xml
log4j2.xml

JDK (Java Util Logging) 配置文件
logging.properties

如果可能,我们建议您在日志配置中使用 -spring变量(例如,logback-spring.xml而不是 logback.xml)。如果您使用标准配置文件,spring 无法完全控制日志初始化。最佳实战:自己要写配置,配置文件名加上 xx-spring.xml

 

切换日志系统引用包

SpringBoot中的starter默认是引入了 logback 日志系统的,所以我们需要在我们的pom中覆盖starter并排除 logback 包,再引入自己想要的日志包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
# 覆盖 starter 的引用,并排除默认的 logback 日志包
<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>
# 手动引入自己想用的日志系统
<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:jacksondataformat-
yaml

文件名:
log4j2.yaml + log4j2.yml

JSON 依赖
com.fasterxml.jackson.core:jackson-databind
文件名:
log4j2.json + log4j2.jsn

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
SpringBoot 日志系统
SpringBoot 默认使用了 SLF4J 作为日志接口,以 Logback 作为曰志的实现,当然我们也可以通过自由选择日志系统 在Spring5之后,Spring 把Apache commons-logging 日志包当成默认的日志系统,……
<<上一篇
下一篇>>