This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 7db768a5407b7dae34d00f3089eb623ad299c26b Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Tue Oct 29 22:31:17 2024 +0100 [ENHANCEMENT] mailUserAgent in IMAP MDC Ease debugging --- .../apache/james/imap/processor/IdProcessor.java | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java index a0c00e8520..c1011a2dea 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java @@ -41,6 +41,7 @@ import com.google.common.collect.ImmutableList; import reactor.core.publisher.Mono; public class IdProcessor extends AbstractMailboxProcessor<IDRequest> implements CapabilityImplementingProcessor { + public static final String MDC_KEY = "bound_MDC"; private static final Logger LOGGER = LoggerFactory.getLogger(IdProcessor.class); private static final ImmutableList<Capability> CAPABILITIES = ImmutableList.of(Capability.of("ID")); @@ -53,12 +54,28 @@ public class IdProcessor extends AbstractMailboxProcessor<IDRequest> implements protected Mono<Void> processRequestReactive(IDRequest request, ImapSession session, Responder responder) { responder.respond(new IdResponse()); - return ReactorUtils.logAsMono(() -> MDCStructuredLogger.forLogger(LOGGER) - .field("parameters", request.getParameters().map(Object::toString).orElse("NIL")) - .log(logger -> logger.info("Received id information"))).then(unsolicitedResponses(session, responder, false)) + String mailUserAgent = request.getParameters().map(Object::toString).orElse("NIL"); + addMailUserAgentToMDC(session, mailUserAgent); + + return logMailUserAgent(mailUserAgent) + .then(unsolicitedResponses(session, responder, false)) .then(Mono.fromRunnable(() -> okComplete(request, responder))); } + private Mono<Void> logMailUserAgent(String mailUserAgent) { + return ReactorUtils.logAsMono(() -> MDCStructuredLogger.forLogger(LOGGER) + .field("parameters", mailUserAgent) + .log(logger -> logger.info("Received id information"))); + } + + private void addMailUserAgentToMDC(ImapSession session, String mailUserAgent) { + Object maybeMDC = session.getAttribute(MDC_KEY); + if (maybeMDC instanceof MDCBuilder boundMDC) { + MDCBuilder newMDC = boundMDC.addToContext("mailUserAgent", mailUserAgent); + session.setAttribute(MDC_KEY, newMDC); + } + } + @Override protected MDCBuilder mdc(IDRequest message) { return MDCBuilder.create() --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org