在Spring应用程序中记录容器启动时的restful端点

时间:2016-11-15 22:43:35

标签: java spring rest spring-mvc restful-url

我的Spring应用程序通过Controller类中的@RequestMapping注释公开了restful端点。

我希望在服务器启动时将所有应用程序控制器的所有端点记录到控制台中。

我使用tomcat服务器和log4j进行日志记录。

感谢。

4 个答案:

答案 0 :(得分:4)

对于使用spring-boot的用户:

在最新的 spring-boot 版本(自v2.1起)中,他们更改了映射默认日志级别(如发行说明here中所指定)。

将以下属性之一添加到 application.properties 文件:

  • logging.level.web=TRACE
  • logging.level.org.springframework.web=TRACE

示例控制台输出:

2018-12-12 11:16:51.793 TRACE 11868 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping
    c.n.c.MyController:
    {POST /users}: addUser(User)
    {DELETE /users}: deleteUser(User)
    {PUT /users}: updateUser(User)
    {GET /users/{id}}: getUserById(String)
    {GET /users}: getUsers()
    {GET /users_static}: getUsersStaticList()
2018-12-12 11:16:51.795 TRACE 11868 --- [  restartedMain] 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)

答案 1 :(得分:3)

在log4J中,添加信息日志级别 dplyr上课。

级别org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

INFO

你应该有这种信息(行被截断):

log4j.category.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=INFO

更新

自Spring MVC 5.1起,日志记录策略发生了变化 现在,使用2016-11-15 23:34:30.040 INFO 10156 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/contacts/{id}],methods=[GET],produces=[application/json]}" o 2016-11-15 23:34:30.040 INFO 10156 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/contacts/{id}],methods=[DELETE],produces=[application/json]} 2016-11-15 23:34:30.040 INFO 10156 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/contacts],methods=[POST],consumes=[application/json],produce 2016-11-15 23:34:30.040 INFO 10156 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/contacts/{id}],methods=[PUT],consumes=[application/json],pro 2016-11-15 23:34:30.040 INFO 10156 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/contacts],methods=[GET],produces=[application/json]}" onto p 2016-11-15 23:34:30.040 INFO 10156 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/contacts/search],methods=[GET],params=[group-id],produces=[a 级别记录的信息非常少,INFO级别提供了更多信息,但不详细。
只有DEBUG级别才会提供详细信息。

这是changelog(重点是我的):

  

记录修订:

     

可以通过标准的Commons Logging检测Spring的JCL网桥。

     

减少信息噪音,可读的调试日志,跟踪级别的详细信息

因此,以这种方式更改日志记录配置以列出所有映射:

TRACE

答案 2 :(得分:3)

从 Spring 5.3.5 开始,可以使用特殊的专用隐藏 Logger 来记录端点映射,而无需记录所有请求处理的开销。

<Logger name="_org.springframework.web.servlet.HandlerMapping.Mappings" level="debug" additivity = "false">

此功能是在 https://github.com/spring-projects/spring-framework/issues/26539

中引入的

答案 3 :(得分:0)

要添加到Spring Boot中的上一个答案,Actuator除了其他内容之外还有mappings /mappings $sourcePDF = New-Object iTextsharp.text.Document;[iTextsharp.text.Document]$sourcePDF = $pdf.GetPageSizeWithRotation($fromPage);下可访问的内容。