我想禁止 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的。
然而,正式文件中要求在应用程序内进行统一,所以如果库中存在需要通过属性进行配置的情况,请选择使用属性。
設置数值
我们将按顺序查看生成的日志。
春季的主要横幅模式
默认:控制台
关闭后,以下的横幅将不再以傲慢的姿态出现,呈现的那个“デェェェェン”也会消失。
spring:
main:
banner-mode: off
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.9)
由于我曾经在Twitter上看到一些令人惊艳的横幅广告,它们可以加载外部文件并提供丰富的设置选项,所以在个人开发项目时,我希望能将它们作为未来有趣的替代选择。但由于这次的目的是遏制,我将它关闭了。
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のグループには含まれていません。
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
既然公式文档中有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
总结
以下是包含到此为止的设置的文件。
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?”