복붙노트

[SPRING] Spring 애플리케이션에서 컨테이너 시작시 편안한 엔드 포인트 기록

SPRING

Spring 애플리케이션에서 컨테이너 시작시 편안한 엔드 포인트 기록

Controller 클래스의 @RequestMapping 주석을 통해 편안한 엔드 포인트를 노출시키는 Spring 응용 프로그램이 있습니다.

서버 시작시 모든 응용 프로그램 컨트롤러의 모든 끝점을 콘솔에 로그인하고 싶습니다.

로깅에 Tomcat 서버와 log4j를 사용합니다.

감사.

해결법

  1. ==============================

    1.스프링 부트를 사용하는 사람들 :

    스프링 부트를 사용하는 사람들 :

    최신 스프링 부트 릴리즈 (v2.1부터)에서는 매핑 기본 로그 수준을 변경했습니다 (여기의 릴리스 노트에 지정된대로).

    application.properties 파일에 다음 특성 중 하나를 추가하십시오.

    샘플 콘솔 출력 :

    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. ==============================

    2.log4J에서에 대한 정보 로그 레벨을 추가하십시오. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 클래스.

    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부터 로깅 전략이 변경되었습니다. 이제 INFO 수준으로 기록되는 정보는 거의 없으며 DEBUG 수준은 자세한 정보를 제공하지만 자세한 내용은 제공하지 않습니다. TRACE 레벨 만 자세한 정보를 제공합니다.

    변경 내역은 다음과 같습니다 (강조는 내 것입니다).

    따라서 모든 매핑을 나열하도록 로깅 구성을 다음과 같이 변경하십시오.

    Log4J 속성 방법 :

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

    로그 백 방법 :

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

    3.Spring Boot의 이전 답변에 추가하기 위해 Actuator는 무엇보다도 / mappings에서 액세스 할 수있는 매핑이라는 전용 엔드 포인트를 노출하고 있습니다.

    Spring Boot의 이전 답변에 추가하기 위해 Actuator는 무엇보다도 / mappings에서 액세스 할 수있는 매핑이라는 전용 엔드 포인트를 노출하고 있습니다.

  4. from https://stackoverflow.com/questions/40621044/log-restful-endpoints-on-container-startup-in-a-spring-application by cc-by-sa and MIT license