スプリングブックはHttpアクセスログを記録しています(簡単入門2)

3086 ワード

一.記録要求情報
@Aspect
@Component
public class HttpAspect {

    private static final Logger logger  = LoggerFactory.getLogger(HttpAspect.class);

    /**
     *                   
     */
    @Pointcut("execution(public * com.kafei.HelloController.*(..))")
    public void log() {}

    /**
     *
     * @param joinPoint
     *   :     HttpServletRequest javax.servlet.http.HttpServletRequest;
     */
    @Before("log()")
    public void doBefore(JoinPoint joinPoint) {
        logger.info("1");
        ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        //      url
        logger.info("url={}",request.getRequestURL());

        //      method
        logger.info("method={}",request.getMethod());

        //     ip
        logger.info("ip={}",request.getRemoteAddr());

        //        
        logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());

        //       
        logger.info("args={}",joinPoint.getArgs());
    }

    @After("log()")
    public void doAfter() {
        logger.info("2");
    }

    @AfterReturning(returning = "obj",pointcut = "log()")
    public void doAfterReturning(Object obj) {
        logger.info("3");
        logger.info("response={}",obj);
    }


}
二.要求住所:http://127.0.0.1:8080/aa?id=100
ハローController.java
@RestController
public class HelloController {

    @GetMapping("/aa")
    public String aa(Girl girl) {
        System.out.println("aa");
        return "aa2";
    }

}
四.結果
2018-05-28 11:19:51.976  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : 1
2018-05-28 11:19:51.977  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : url=http://127.0.0.1:8080/aa
2018-05-28 11:19:51.978  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : method=GET
2018-05-28 11:19:51.978  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : ip=127.0.0.1
2018-05-28 11:19:51.980  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : class_method=com.kafei.HelloController.aa
2018-05-28 11:19:51.980  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : args=Girl{id=100, age=null}
aa
2018-05-28 11:19:51.985  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : 2
2018-05-28 11:19:51.985  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : 3
2018-05-28 11:19:51.985  INFO 6084 --- [nio-8080-exec-1] com.kafei.aspect.HttpAspect              : response=aa2
五.まとめ
1.方法の実行順序:@Before>aa()@After>@AfterReturning
2.logger.info(「url={}」、request.get Request URL();ここで{}は変数として理解され、request.get Request URL()はその変数の値として理解される。