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

2022-09-04 05:35:14

我有一个Spring应用程序,它通过在控制器类中@RequestMapping注释来公开宁静的端点。

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

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

谢谢。


答案 1

对于那些使用弹簧靴的人:

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

将以下属性之一添加到 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)

答案 2

在 log4J 中,添加类的信息日志级别。org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

与级别 :INFO

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

您应该拥有此类信息(行被截断):

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

更新

自 Spring MVC 5.1/Spring Boot 2 以来,日志记录策略已更改。
现在很少有信息记录在级别上,级别提供了更多信息,但并不详细。
只有级别会提供详细信息。INFODEBUGTRACE

以下是更新日志(强调的是我的):

日志记录修订版:

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

减少信息、可读调试日志、跟踪级别详细信息的干扰

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

Log4J属性方式:

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

回退方式 :

<logger level="TRACE" name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>