在启动时列出日志中的已注册请求映射

时间:2013-07-09 15:14:13

标签: spring-mvc logging log4j

我想在应用程序启动时列出日志中的所有已注册请求映射(Spring MVC,log4j)。理想情况下,我想为每个条目查看两件事:URL和相应的控制器方法。

我尝试过什么:我在corresponding documentation entry搜索没有成功。

3 个答案:

答案 0 :(得分:0)

从Spring 3.1开始,您需要激活org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(...)的信息记录。

答案 1 :(得分:0)

请查看此博文,了解有关如何在应用程序中记录Spring MVC映射的更多信息,source blogpost

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

@Controller
public class EndpointDocController {

    private final RequestMappingHandlerMapping handlerMapping;

    @Autowired
    public EndpointDocController(RequestMappingHandlerMapping handlerMapping) {

        this.handlerMapping = handlerMapping;

    }

    @RequestMapping(value = "/endpointdoc", method = RequestMethod.GET)
    public void show(Model model) {

        model.addAttribute("handlerMethods",
                this.handlerMapping.getHandlerMethods());

    }
}

答案 2 :(得分:0)

从春天的代码(org.springframework.web.servlet.handler.AbstractHandlerMethodMapping):

this.handlerMethods.put(mapping, newHandlerMethod);                        
if (logger.isInfoEnabled()) {                                              
    logger.info("Mapped \"" + mapping + "\" onto " + newHandlerMethod);    
}                                                                          

如您所见,代码已经存在并映射到 INFO 级别(apache-commons-logging),因此默认情况下您应该看到每个@RequestMapping,无论它们是否在@Controller@RestController

因为您要求它,首先确保记录器实现可用。如果你看到

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

在应用程序启动时,没有记录器实现!如果出现此消息,则必须确定要使用的记录器实现。最常用的是slf4j,log4j和jul。

Slf4j / Maven

将此添加到依赖项以查看输出。

<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version> </dependency>

为什么不使用commons-logging?

仅仅是其他人使用的API,而不是实现,而System.out不是单commons-logging