package com.sequenceiq.cloudbreak.logger; import java.lang.reflect.Field; import org.slf4j.MDC; import com.sequenceiq.cloudbreak.domain.CbUser; public class MDCBuilder { private MDCBuilder() { } public static void buildMdcContext() { buildMdcContext(null); } public static void buildMdcContext(Object object) { if (object == null) { MDC.put(LoggerContextKey.OWNER_ID.toString(), "cloudbreak"); MDC.put(LoggerContextKey.RESOURCE_TYPE.toString(), "cloudbreakLog"); MDC.put(LoggerContextKey.RESOURCE_ID.toString(), "undefined"); MDC.put(LoggerContextKey.RESOURCE_NAME.toString(), "cb"); } else { MDC.put(LoggerContextKey.OWNER_ID.toString(), getFieldValue(object, "owner")); MDC.put(LoggerContextKey.RESOURCE_ID.toString(), getFieldValue(object, "id")); MDC.put(LoggerContextKey.RESOURCE_NAME.toString(), getFieldValue(object, "name")); MDC.put(LoggerContextKey.RESOURCE_TYPE.toString(), object.getClass().getSimpleName().toUpperCase()); } } public static void buildMdcContext(String stackId, String stackName, String ownerId) { MDC.put(LoggerContextKey.OWNER_ID.toString(), ownerId); MDC.put(LoggerContextKey.RESOURCE_ID.toString(), stackId); MDC.put(LoggerContextKey.RESOURCE_NAME.toString(), stackName); } public static void buildUserMdcContext(CbUser user) { if (user != null) { MDC.put(LoggerContextKey.OWNER_ID.toString(), user.getUserId()); } } private static String getFieldValue(Object o, String field) { try { Field privateStringField = o.getClass().getDeclaredField(field); privateStringField.setAccessible(true); return privateStringField.get(o).toString(); } catch (Exception e) { return "undefined"; } } }