我想禁止 SpringBoot 的启动日志

SpringBoot的日志输出做法

SpringBoot虽然可以轻松创建Web应用程序,但如果不了解AutoConfiguration和ConfigurationProperties的机制,将无法定制应用程序,因为各种设置被默认值隐藏起来,可能会增加实现所需功能的难度。

禁止启动日志

当你运行SpringBoot时,会输出一个例子。如果在生产环境中每次启动时都会出现,我想你肯定希望抑制输出。

可以设置logging.level.root=WARN之类的,当然可以消除输出,但如果有正规的属性可以消除,我希望能够消除它。

所以,经过调查,似乎可以使用spring.main.log-startup-info=off,但是无法完全删除,所以我进行了验证。

验证版本

    • SpringBoot 2.4.9

spring-boot-starter-actuator
spring-boot-starter-validation
spring-boot-starter-web
mybatis-spring-boot-starter

首先是关于.properties和.yml的争论

由于个人喜好的原因,我认为无论哪种方式都可以,但是我觉得在容器执行环境中,使用yml的情况越来越多,所以我是支持yml的。

本文中将使用xxx.yyy.zzz的表达方式,但由于示例是以yml格式呈现的,请根据需要进行相应的转换。

然而,正式文件中要求在应用程序内进行统一,所以如果库中存在需要通过属性进行配置的情况,请选择使用属性。

設置数值

我们将按顺序查看生成的日志。

春季的主要横幅模式

默认:控制台

关闭后,以下的横幅将不再以傲慢的姿态出现,呈现的那个“デェェェェン”也会消失。

spring:
  main:
    banner-mode: off
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.9)

由于我曾经在Twitter上看到一些令人惊艳的横幅广告,它们可以加载外部文件并提供丰富的设置选项,所以在个人开发项目时,我希望能将它们作为未来有趣的替代选择。但由于这次的目的是遏制,我将它关闭了。

从SpringBoot1.3版本开始,虽然一些较旧的文章会提及spring.main.show-banner,但此设置已被视为不推荐使用。

Spring-Boot-1.3-发布说明

spring.main.log-startup-info 可以被理解为 “spring应用程序启动时的日志信息”。

默认:控制台

将其设置为 false。
只有通过启动入口点 SpringApplication 生成的日志可以在此属性中进行抑制。

各种启动器的依赖添加会自动配置并引入该设置,此设置不会阻止输出。

spring:
  main:
    log-startup-info: false
[NEW!抑止対象]> 2021-07-27 16:14:56.376  INFO 17768 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 11.0.5 on kuma with PID 17768 (C:\workspace\demo\target\classes started by kuma in C:\workspace\demo)
[NEW!抑止対象]> 2021-07-27 16:14:56.380  INFO 17768 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2021-07-27 16:14:57.291  WARN 17768 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.
2021-07-27 16:14:57.669  INFO 17768 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-07-27 16:14:57.697  INFO 17768 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-07-27 16:14:57.697  INFO 17768 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.50]
2021-07-27 16:14:57.820  INFO 17768 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-07-27 16:14:57.821  INFO 17768 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1366 ms
2021-07-27 16:14:58.652  INFO 17768 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2021-07-27 16:14:58.713  INFO 17768 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
[NEW!抑止対象]> 2021-07-27 16:14:58.737  INFO 17768 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 2.796 seconds (JVM running for 3.582)
2021-07-27 16:14:59.058  INFO 17768 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-07-27 16:14:59.058  INFO 17768 --- [           main] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-27 16:14:59.060  INFO 17768 --- [           main] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms
2021-07-27 16:14:59.075  INFO 17768 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-07-27 16:14:59.250  INFO 17768 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

日志组

为了方便设置包名,提供了日志组(log group)功能。
默认提供的有两个:logging.level.web和logging.level.sql。

TomcatWebServerもwebっぽく見えますが、FQCNはorg.springframework.boot.web.embedded.tomcat.TomcatWebServerであり残念ながらlogging.level.webのグループには含まれていません。

NameLoggersweborg.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeanssqlorg.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener

既然公式文档中有Tomcat的示例,我们应该感激地使用它。

logging:
  group:
  # tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"
    tomcat:
      - org.apache.catalina
      - org.apache.coyote
      - org.apache.tomcat
      - org.springframework.boot.web.embedded.tomcat

在公式文档中,使用逗号分隔并使用双引号进行定义,但由于这是yml格式,因此我将其转换为数组表示。

总结

以下是包含到此为止的设置的文件。

spring:
  main:
    banner-mode: off
    log-startup-info: false

logging:
  group:
    tomcat:
      - org.apache.catalina
      - org.apache.coyote
      - org.apache.tomcat
      - org.springframework.boot.web.embedded.tomcat
  level:
    web: WARN
    tomcat: WARN
2021-07-27 22:35:13.846  WARN 18224 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration.
2021-07-27 22:35:14.267  INFO 18224 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1124 ms
2021-07-27 22:35:15.300  INFO 18224 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-07-27 22:35:15.412  INFO 18224 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

我感觉很爽了。

ClassPathMapperScannerのWARNログは@MapperやMybatisの定義ファイルがないだけなので割愛。

org.springframework.boot.web.servlet.context.ServletWebServerApplicationContextだけは個別に設定しないといけないようです。。
DataSourceは今度追記するかも。

附录

日志定义文件。

如果您想要更改日志输出的内容(例如要输出Trace-Id或X-Forward-For的IP地址),最好直接在logback-spring.xml文件中进行定义。

默认使用的定义文件
– 默认.xml
– 基本.xml

由于存在 logging.pattern.console 属性,因此可以将 xml 文件的父级指定为 application.properties ;但由于会导致其他设置项不易于查看,建议将其分离为单独的文件。

spring:
  config:
    import:
      - logback-config.yml
logging:
  level:
    root: WARN
  pattern:
    console: "%d{yyyy/MM/dd HH:mm:ss.SSS} -%5p [%15.15t] %-40.40logger{39} : %m%n"

参考资料

如何理解Qiita – Spring Boot的外部配置值的处理方式
如何在Qiita – Spring Boot中将日志库设置为Log4j2

请将以下内容进行中文重述,只需要一个选项:

“Can you please explain the concept of artificial intelligence in simple terms?”

广告
将在 10 秒后关闭
bannerAds