我想登录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>