对比Spring Boot1.x与Spring Boot2.x,我发现打印日志的请求路径有变化

编程入门 行业动态 更新时间:2024-10-21 06:28:39

对比Spring Boot1.x与Spring Boot2.x,我发现打印日志的请求<a href=https://www.elefans.com/category/jswz/34/1771438.html style=路径有变化"/>

对比Spring Boot1.x与Spring Boot2.x,我发现打印日志的请求路径有变化

在玩过Spring Boot2.x之后,我抱着试试玩玩老版本的1.x,结果在运行的时候,我发现整个Spring Boot启动的日志里边出现了相关请求路径,进而研究了在Spring 构建的Web启动的时候发现:

2023-10-26 13:48:32.104 DEBUG 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : 5 request handler methods found on class com.didispace.chapter26.UserController: {public java.lang.String com.didispace.chapter26.UserController.deleteUser(java.lang.Long)={[/users/{id}],methods=[DELETE]}, public java.lang.String com.didispace.chapter26.UserController.putUser(java.lang.Long,com.didispace.chapter26.User)={[/users/{id}],methods=[PUT]}, public java.lang.String com.didispace.chapter26.UserController.postUser(com.didispace.chapter26.User)={[/users/],methods=[POST]}, public com.didispace.chapter26.User com.didispace.chapter26.UserController.getUser(java.lang.Long)={[/users/{id}],methods=[GET]}, public java.util.List com.didispace.chapter26.UserController.getUserList()={[/users/],methods=[GET]}}
2023-10-26 13:48:32.105  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/{id}],methods=[DELETE]}" onto public java.lang.String com.didispace.chapter26.UserController.deleteUser(java.lang.Long)
2023-10-26 13:48:32.105 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'UC#deleteUser'
2023-10-26 13:48:32.105  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/{id}],methods=[PUT]}" onto public java.lang.String com.didispace.chapter26.UserController.putUser(java.lang.Long,com.didispace.chapter26.User)
2023-10-26 13:48:32.106 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'UC#putUser'
2023-10-26 13:48:32.106  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/],methods=[POST]}" onto public java.lang.String com.didispace.chapter26.UserController.postUser(com.didispace.chapter26.User)
2023-10-26 13:48:32.106 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'UC#postUser'
2023-10-26 13:48:32.106  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/{id}],methods=[GET]}" onto public com.didispace.chapter26.User com.didispace.chapter26.UserController.getUser(java.lang.Long)
2023-10-26 13:48:32.106 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'UC#getUser'
2023-10-26 13:48:32.106  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/users/],methods=[GET]}" onto public java.util.List<com.didispace.chapter26.User> com.didispace.chapter26.UserController.getUserList()
2023-10-26 13:48:32.106 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'UC#getUserList'
2023-10-26 13:48:32.107 DEBUG 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : 2 request handler methods found on class org.springframework.boot.autoconfigure.web.BasicErrorController: {public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)={[/error]}, public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)={[/error],produces=[text/html]}}
2023-10-26 13:48:32.107  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2023-10-26 13:48:32.107 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'BEC#error'
2023-10-26 13:48:32.107  INFO 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2023-10-26 13:48:32.107 TRACE 12012 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapping name 'BEC#errorHtml'
2023-10-26 13:48:32.118  INFO 12012 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2023-10-26 13:48:32.118  INFO 12012 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2023-10-26 13:48:32.131  INFO 12012 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2023-10-26 13:48:32.180  INFO 12012 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2023-10-26 13:48:32.200  INFO 12012 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2023-10-26 13:48:32.202  INFO 12012 --- [           main] c.d.chapter26.Chapter26Application       : Started Chapter26Application in 1.048 seconds (JVM running for 1.79)

不知道各位发现没,我发现了在日志中打印了请求的路径,经过一段时间的排查,我们发现这些接口的日志但是由org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping类在启动的时候,扫描Spring MVC中的@Controller@RequestMappering等注解去发现应用提供的所有接口,然后再日志中打印,以便于开发者排查关于接口的相关启动是否正确,或者说是接口是否被暴露,外界是否可以通过接口进行访问。

然后我们发现在Spring Boot2.x的时候,让我们看看:

2023-10-26 14:10:25.407  INFO 30444 --- [           main] c.d.chapter26.Chapter26Application       : Starting Chapter26Application on danfoo with PID 30444 (started by 29283 in D:\开发中的文档\相关代码\SpringBoot-Learning)
2023-10-26 14:10:25.409  INFO 30444 --- [           main] c.d.chapter26.Chapter26Application       : No active profile set, falling back to default profiles: default
2023-10-26 14:10:26.020  INFO 30444 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-10-26 14:10:26.040  INFO 30444 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-10-26 14:10:26.040  INFO 30444 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.16]
2023-10-26 14:10:26.046  INFO 30444 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_261\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;D:\SoftWares\Oracle\OracleDB\bin;C:\Program Files\Java\jdk1.8.0_261\bin;C:\Program Files\Java\jdk1.8.0_261\jre\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Program Files\OpenVPN\bin;C:\Program Files\Microsoft VS Code\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\SoftWares\Vagrant\bin;C:\Program Files\TortoiseGit\bin;C:\Users\29283\AppData\Local\Programs\Python\Python38\Scripts\;C:\Users\29283\AppData\Local\Programs\Python\Python38\;C:\Users\29283\AppData\Local\Microsoft\WindowsApps;C:\Users\29283\AppData\Roaming\npm;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.1\bin;;D:\MySoft\PyCharm 2022.1.4\bin;;.]
2023-10-26 14:10:26.093  INFO 30444 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-10-26 14:10:26.094  INFO 30444 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 667 ms
2023-10-26 14:10:26.198  INFO 30444 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2023-10-26 14:10:26.282  INFO 30444 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-10-26 14:10:26.283  INFO 30444 --- [           main] c.d.chapter26.Chapter26Application       : Started Chapter26Application in 1.021 seconds (JVM running for 1.846)

我们发现,2.x并未打印这些日志了,在我们启动的时候也发现很多启动日志变得非常少。不知道各位觉得有日志还是没日志好。如果你需要再Spring Boot2.x中找回日志请求路径列表,其实也很简单,在配置文件中添加如下配置就行了。

logging.level.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=trace

Spring Boot 2.1.x的版本不再打印请求路径列表,是因为,从2.1.x的版本中将日志的打印级别进行调整,从原来的INFO调整为TRACE

添加如上配置在application.properties文件中或者application.yml文件中,就可以得到如下打印的日志信息:

2023-10-26 14:37:03.273  INFO 31340 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2023-10-26 14:37:03.301 TRACE 31340 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : c.d.c.UserController:{GET /users/}: getUserList(){GET /users/{id}}: getUser(Long){PUT /users/{id}}: putUser(Long,User){POST /users/}: postUser(User){DELETE /users/{id}}: deleteUser(Long)
2023-10-26 14:37:03.306 TRACE 31340 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : o.s.b.a.w.s.e.BasicErrorController:{ /error}: error(HttpServletRequest){ /error, produces [text/html]}: errorHtml(HttpServletRequest,HttpServletResponse)
2023-10-26 14:37:03.307 DEBUG 31340 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : 7 mappings in 'requestMappingHandlerMapping'
2023-10-26 14:37:03.368  INFO 31340 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-10-26 14:37:03.370  INFO 31340 --- [           main] c.d.chapter26.Chapter26Application       : Started Chapter26Application in 1.327 seconds (JVM running for 2.119)

可以看到,2.1.x后,除了调整日志级别之外,对打印内容也进行了相关变化甚至调整,现在的打印内容可以根据接口创建的Controller进行了分类打印,看起来舒服不?个人觉得,这样可以更加有利于我们开发者根据自己编写的Controller来查找初始化了的那些HTTP接口。

更多推荐

对比Spring Boot1.x与Spring Boot2.x,我发现打印日志的请求路径有变化

本文发布于:2023-12-03 08:33:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1653261.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路径   我发现   日志   Spring

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!