Skip to content

Commit e76ce66

Browse files
authored
chore: Add organizationId in MDC logs to ease debugging in multi-org setup (appsmithorg#40211)
1 parent 7dfd428 commit e76ce66

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

appsmith-server/src/main/java/com/appsmith/server/filters/MDCFilter.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
import com.appsmith.server.domains.User;
44
import com.appsmith.server.helpers.LogHelper;
5+
import com.appsmith.server.helpers.UserOrganizationHelper;
56
import lombok.extern.slf4j.Slf4j;
6-
import org.apache.commons.lang3.StringUtils;
77
import org.slf4j.MDC;
88
import org.springframework.http.server.reactive.ServerHttpRequest;
99
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
1010
import org.springframework.stereotype.Component;
11+
import org.springframework.util.StringUtils;
1112
import org.springframework.web.server.ServerWebExchange;
1213
import org.springframework.web.server.WebFilter;
1314
import org.springframework.web.server.WebFilterChain;
@@ -17,6 +18,7 @@
1718
import java.util.Map;
1819

1920
import static com.appsmith.external.constants.MDCConstants.USER_EMAIL;
21+
import static com.appsmith.server.constants.ce.FieldNameCE.ORGANIZATION_ID;
2022
import static java.util.stream.Collectors.toMap;
2123

2224
/**
@@ -27,6 +29,7 @@
2729
@Slf4j
2830
public class MDCFilter implements WebFilter {
2931

32+
private final UserOrganizationHelper userOrganizationHelper;
3033
private static final String MDC_HEADER_PREFIX = "X-MDC-";
3134

3235
/**
@@ -38,23 +41,33 @@ public class MDCFilter implements WebFilter {
3841

3942
public static final String REQUEST_ID_HEADER = "X-Request-Id";
4043

44+
public MDCFilter(UserOrganizationHelper userOrganizationHelper) {
45+
this.userOrganizationHelper = userOrganizationHelper;
46+
}
47+
4148
@Override
4249
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
4350
try {
4451
return ReactiveSecurityContextHolder.getContext()
4552
.map(ctx -> ctx.getAuthentication().getPrincipal())
46-
.flatMap(principal -> {
53+
.zipWith(userOrganizationHelper
54+
.getCurrentUserOrganizationId()
55+
.defaultIfEmpty(""))
56+
.flatMap(tuple2 -> {
57+
final Object principal = tuple2.getT1();
58+
final String organizationId = tuple2.getT2();
4759
final User user = principal instanceof User ? (User) principal : null;
4860
return chain.filter(exchange)
49-
.contextWrite(ctx -> addRequestHeadersToContext(exchange.getRequest(), ctx, user));
61+
.contextWrite(ctx ->
62+
addRequestHeadersToContext(exchange.getRequest(), ctx, user, organizationId));
5063
});
5164
} finally {
5265
MDC.clear();
5366
}
5467
}
5568

5669
private Context addRequestHeadersToContext(
57-
final ServerHttpRequest request, final Context context, final User user) {
70+
final ServerHttpRequest request, final Context context, final User user, final String organizationId) {
5871
final Map<String, String> contextMap = request.getHeaders().toSingleValueMap().entrySet().stream()
5972
.filter(x -> x.getKey().startsWith(MDC_HEADER_PREFIX))
6073
.collect(toMap(v -> v.getKey().substring((MDC_HEADER_PREFIX.length())), Map.Entry::getValue));
@@ -63,6 +76,10 @@ private Context addRequestHeadersToContext(
6376
contextMap.put(USER_EMAIL, user.getEmail());
6477
}
6578

79+
if (StringUtils.hasLength(organizationId)) {
80+
contextMap.put(ORGANIZATION_ID, organizationId);
81+
}
82+
6683
final String internalRequestId = request.getHeaders().getFirst(INTERNAL_REQUEST_ID_HEADER);
6784
contextMap.put(INTERNAL_REQUEST_ID_HEADER, internalRequestId);
6885

appsmith-server/src/main/resources/application-ce.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ appsmith.codec.max-in-memory-size=${APPSMITH_CODEC_SIZE:150}
3232
logging.level.root=info
3333
logging.level.com.appsmith=debug
3434
logging.level.com.external.plugins=debug
35-
logging.pattern.console=[%d{ISO8601, UTC}] [%t] requestId=%X{X-Appsmith-Request-Id} userEmail=%X{userEmail} traceId=%X{traceId} spanId=%X{spanId} - %m%n
35+
logging.pattern.console=[%d{ISO8601, UTC}] [%t] requestId=%X{X-Appsmith-Request-Id} userEmail=%X{userEmail} orgId=%X{organizationId} traceId=%X{traceId} spanId=%X{spanId} - %m%n
3636

3737
#Spring security
3838
spring.security.oauth2.client.registration.google.client-id=${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID:missing_value_sentinel}

0 commit comments

Comments
 (0)