Spring日志请求有效负载

时间:2017-05-10 07:22:26

标签: spring-mvc spring-boot

我想记录每个传入的请求数据和有效负载(正文)。如何在Spring Boot中配置?以及如何在日志中隐藏密码等敏感数据?

是否可以记录原始的“原始”请求正文(例如JSON)?

2 个答案:

答案 0 :(得分:1)

您可以使用AOP(面向方面​​编程)并拦截所有请求并记录您需要的信息。您还可以过滤需要记录的请求类型。 Spring-Boot的一个例子可能是这段代码

如果您想从方面的日志记录中跳过某些方法,可以添加:

创建注释

@Retention(RetentionPolicy.RUNTIME)
public @interface NoLogging {}


@Aspect
@Component
public class LogsAspect {

    private static final Logger LOGGER = LoggerFactory.getLogger(EventAspect.class);

    @Before("execution(* com.your.controller..*Controller.*(..)) && !@annotation(NoLogging)")
    public void beforeController(JoinPoint joinPoint){
        String packageName = joinPoint.getSignature().getDeclaringTypeName();
        String params = getArguments(joinPoint);
        String methodName = joinPoint.getSignature().getName();
        //Log here your message as you prefer
    }
}

在控制器的任何方法中,如果要避免按方面记录,请添加注释

@RequestMapping(value = "/login", method = RequestMethod.GET)
@NoLogging
public ModelAndView loginUser(){
    //actions
}

答案 1 :(得分:0)

IMO,记录任何传入的请求应该放在Web服务器级别而不是应用程序级别。 例如,您可以在Nginx上打开/关闭access_log。