如何在Spring-boot中为REST API的每个请求创建唯一的ID?

时间:2019-05-28 08:32:51

标签: java spring-boot logging request log4j

我需要使我的日志(log4j引擎)更具信息性,每个请求对Spring-Boot应用程序中的REST API都具有唯一的ID。

我想避免使用具有requestId字段并从其扩展的超类。

我试图在网络上寻找一个很好的例子,但是并不清楚。

我可以使用任何最佳实践吗?

2 个答案:

答案 0 :(得分:0)

乍一看,在集成测试中使用这种功能只会引起问题。

理想情况下,只需遵循SRP原理,并将生成逻辑包含在专用类中,就可以使可注入@Component .. MyIdGenerator等。

您可能有一个同步方法generateId()

现在,您可以在需要的任何控制器中使用它,也可以更轻松地设置集成测试并对其进行更多控制。

更新

如果这是一项全球战略,您还可以利用HandleInterceptorAdapter

@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

    /* generate unique id here and log what is needed */

    }

您可以将ID生成和日志记录封装在此类中。

答案 1 :(得分:0)

有以下几种最佳做法:

  1. 使用AOP,请参考:AOP used for controller layer
  2. 使用MDC
  3. 将MDC与AOP一起使用 MDC with AOP