0


重学SpringBoot3-日志Logging

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

重学SpringBoot3-日志Logging

引言

日志记录是任何应用程序开发过程中的一个重要部分,它帮助开发人员了解应用程序的运行状态、诊断问题并进行有效的错误跟踪。

SpringBoot3

提供了一个强大的日志管理系统,支持各种日志框架,并提供了简单的配置方法。本教程将介绍

SpringBoot3

中的日志系统,包括默认配置、如何自定义日志设置以及如何使用不同的日志框架。

默认日志配置

日志门面

SpringBoot3

默认是使用

slf4j + Logback

作为默认的日志门面和实现,但也支持其他日志系统,如

Log4j2

JUL (Java Util Logging)

,这是通过所谓的日志门面实现的,开发者可以根据自己的需求选择合适的日志实现框架进行配置。

SpringBoot

中,日志门面是指通过引入日志框架的抽象层来统一管理应用程序中的日志输出。

SpringBoot

内置了

Commons Logging

SLF4J

jboss-logging

作为日志抽象层(门面),具体的实现可以是

 Log4j

JUL

Log4j2

Logback

通过使用日志门面,开发者可以在不改变应用程序代码的情况下,灵活地切换和配置不同的日志实现框架,从而更好地适应不同的部署环境和需求。这样一来,开发者可以更方便地进行日志输出的管理和调整,提高应用程序的可维护性和扩展性。

如何实现默认配置

以导入

spring-boot-starter-web

为例,它会导入

spring-boot-starter

spring-boot-starter

spring-boot-starter

直接引入了

spring-boot-starter-logging

日志相关配配置(而不是通过

XxxAutoConfiguration

,这是因为

SpringBoot

启动的时候就要用到日志,需要内置进

SpringBoot

中)。

spring-boot-starter-logging

日志相关文件在这里,可以看到相关的默认配置文件:

spring-boot包下的日志默认配置

另外

spring-boot

additional-spring-configuration-metadata.json 

文件下会有日志相关一些默认值的格式,这些默认值可以通过配置文件进行修改。

日志配置默认格式

自定义日志配置

虽然默认配置对于开发时足够使用,但在生产环境中,你可能需要自定义日志设置,例如更改日志级别、格式或输出目的地。

日志级别

默认日志级别:

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

你可以在

application.yml

application.properties

文件中设置不同包的日志级别:

logging:level:root: WARN
    org.springframework.web: DEBUG
    com.coderjia: INFO

这里,

root

级别被设为

WARN

Spring web

包日志级别设为

DEBUG

,而你自己的公司代码

com.coderjia

设为

INFO

级别。

日志分组

可以将相关的包分组在一起,统一进行日志级别配置配置。比如:Tomcat 相关的日志统一设置。

logging:group:tomcat: org.apache.catalina,org.apache.coyote,org.apache.tomcat
  level:root: debug
    sql: debug
    tomcat: info
    web: info

以上将

org.apache.catalina,org.apache.coyote,org.apache.tomcat

分组为

tomcat

,并通过

logging.level.tomcat=info

tomcat

组日志级别设置为

info

。另外

SpringBoot

预定义两个组

sql

web

  • 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。

日志格式

默认日志格式如下:

2024-03-06T11:30:42.611+08:00  INFO 31412 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8083 (http) with context path ''
2024-03-06T11:30:42.618+08:00  INFO 31412 --- [           main] c.c.b.SpringBoot303LoggingApplication    : Started SpringBoot303LoggingApplication in 1.602 seconds (process running for 2.442)

格式:

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

默认值:可以参照

spring-boot

additional-spring-configuration-metadata.json

文件中的

logging.pattern.console

项:

日志输出格式默认值

可修改为:

logging:pattern:console:'%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{15} : %msg%n'dateformat:'"yyyy-MM-dd HH:mm"'
  • logging.pattern.console :定义输出的格式,
  • logging.pattern.dateformat: 定义输出日期格式。
2024-03-06 11:36:51 INFO  [main] o.s.b.w.e.t.TomcatWebServer : Tomcat started on port 8083 (http) with context path ''

日志输出

默认情况下,日志输出到控制台。但你可以配置它输出到文件或同时输出到文件和控制台:

logging:file:name: my.log
      path: /var/logs

这将会在

/var/logs

路径下创建一个

my.log

文件记录日志,

logging.file.name=/var/log/my.log

也可以即定义路径又定义名称。

日志归档

如果使用

SpringBoot

默认的

Logback

框架,可以通过

application.properties/yaml

文件指定日志归档文件名和滚动规则,如果是其他日志系统,需要自行配置(添加

log4j2.xml

log4j2-spring.xml

)。

logging:logback:rollingpolicy:file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)
      max-file-size: 12MB

配置项如下:
配置项描述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日志文件被删除之前,可以容纳的最大大小(默认值:0B)。设置 1GB 则磁盘存储超过 1GB 日志后就会删除旧日志文件logging.logback.rollingpolicy.max-history日志文件保存的最大天数(默认值:7).

自定义 Logback 配置

对于更高级的配置,例如滚动策略、过滤器等,你可以通过提供自定义的

Logback

配置文件来实现。创建一个名为

logback-spring.xml

的文件,并放在

src/main/resources

目录下:

<configuration><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><rootlevel="INFO"><appender-refref="STDOUT"/></root></configuration>

这个自定义配置将日志输出格式修改为指定的模式,另外建议自定义配置,配置文件名加上

xxx-spring.xml

(例如,

logback-spring.xml

而不是

logback.xml

),这样更容易被Spring。

切换日志框架

如果你更喜欢使用

Log4j2

而不是

Logback

,你可以轻松切换。首先,排除

SpringBoot

的默认日志启动器,然后添加

Log4j2

的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

然后,你可以像以前一样配置

Log4j2

Spring Boot

会自动识别并应用

Log4j2

的配置。此外如果引入的依赖中自带日志和当前

SpringBoot

默认日志不一致,也可以排查掉依赖中的日志组件。

日志使用

方式一:LoggerFactory 获取Logger对象

在需要打日志的类中定义。

@SpringBootApplicationpublicclassSpringBoot303LoggingApplication{privatestaticLogger log =LoggerFactory.getLogger(SpringBoot303LoggingApplication.class);publicstaticvoidmain(String[] args){SpringApplication.run(SpringBoot303LoggingApplication.class, args);

        log.info("启动完成");}}

方式二:引入 lombok

使用

@Slf4j

注解可以自动生成一个

log

对象,省去了手动获取

Logger

对象的步骤,简化了代码编写。

导入依赖:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>compile</scope></dependency>

添加注接

@Slf4j

:

@Slf4j@SpringBootApplicationpublicclassSpringBoot303LoggingApplication{// private static Logger log = LoggerFactory.getLogger(SpringBoot303LoggingApplication.class);publicstaticvoidmain(String[] args){SpringApplication.run(SpringBoot303LoggingApplication.class, args);

        log.info("启动完成");}}

总结

SpringBoot3

提供了一个灵活且强大的日志系统,支持多种日志框架和丰富的配置选项。通过适当的配置,你可以轻松管理和监控你的应用程序日志,帮助你更有效地开发和维护你的

SpringBoot

应用。理解和掌握

SpringBoot

中的日志配置,将使你能够更好地控制应用程序的日志记录行为。


本文转载自: https://blog.csdn.net/u014390502/article/details/136508852
版权归原作者 CoderJia_ 所有, 如有侵权,请联系我们删除。

“重学SpringBoot3-日志Logging”的评论:

还没有评论