MDC + AspectJ找到一个切入点来捕获基于变量名称的所有方法调用

时间:2018-03-08 11:08:49

标签: java akka aspectj spring-aop mdc

我想登录multitenant(Java Spring with Akka)应用程序。每个日志都应该包含租户ID,我发现MDC看起来非常适合这个目的。我对actor使用akka.event.Logging,对代码的其他部分使用SLF4J(org.slf4j.Logger)。我是MDC和AspectJ的新手。

示例:

logger.info("Tenant: {} is processed", tenantId);

我想在创建包含tenantId变量名的每个日志行之前运行以下代码(如示例):

@Aspect
public class MDCUtils {

    /**
     *  Set TenantId on MDC context map
     *
     * @param tenantId
     */
    @Before(???)
    public static void setTenantId(String tenantId) {
        Map<String, String> contextMap = new HashMap<>();
        contextMap.put("tenantId", tenantId);
        MDC.setContextMap(contextMap);
    }
}

我应该在@Before()内放置什么来捕获包含tenantId变量名的所有日志行创建。如果我抓住了它们,我该如何检索tenantId值? (这些日志中的大多数都有多个参数,而不仅仅是tenantId

我想将tenantId用于此模式:

<pattern>%X{tenant} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>

0 个答案:

没有答案