簡體   English   中英

休息控制器的彈簧日志

[英]Spring Log for Rest Controller

我有一個包含許多方法的休息控制器

@RestController
@RequestMapping("v1/test")
public class TestRestController {

   ...... 100 methods (GET, POST, PATCH, etc)
}

在每種方法中不使用print情況下,如何知道正在訪問哪種方法?
有沒有辦法做到這一點?

您可以使用 Spring AOP:

package com.example;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class ExampleAspect {

    @Before("execution(* com.example.TestRestController(..)")
    public void log(JoinPoint joinPoint) {
        System.out.println("Executing :" + joinPoint.toString());
    }
}

在 Spring 中使用面向方面的編程:

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;    

@Aspect
public class SpringAspect {

    private static final Logger LOG = LoggerFactory.getLogger(SpringAspect.class);

    @Before("execution(* sample.package.path.TestRestController.*(..))")
    public void executedMethodsLogger(JoinPoint joinPoint) {
        LOG.info("[ Executed method {} ]", joinPoint.toString());
    }

}

雖然您可以使用其他答案中提到的 AOP 策略來記錄方法,但如果您只想記錄這些方法實現的端點的所有請求和響應,還有更好的方法。 有幾種方法可以做到這一點:使用 Spring 的 CommonRequestLoggingFilter 或編寫自己的 HandlerInterceptor。 這是一篇關於前兩個選項的好文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM