我想记录每个传入的请求数据和有效负载(正文)。如何在Spring Boot中配置?以及如何在日志中隐藏密码等敏感数据?
是否可以记录原始的“原始”请求正文(例如JSON)?
答案 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。