Hi together,

I hope you can give me a hint / solution to mitigate our Problem.

We use MDCLogging and BreadcrumbIds.
But if we use in our Errorhandling e.g. an Custom OnExceptionProcessor the
MDC Value [camel.breadcrumb] is not set anymore.

Is this a camel bug or do we misunderstand something?
The strange thing: If I use a custom UnitOfWorkFactory it works as
expected. But I would assume that If MDCLogging is enabled then the
DefaultUnitOfWork would handle this.

Please see my example below.

*Simple Routebuilder (with MDCLogging set):*

@Override
public void configure() throws Exception {

    getContext().setUseMDCLogging(true);
    getContext().setUseBreadcrumb(true);

    DeadLetterChannelBuilder errorHandlerBuilder = new
DeadLetterChannelBuilder();
    errorHandlerBuilder.setDeadLetterUri("direct:deadletterTest");
    errorHandlerBuilder.setOnExceptionOccurred(onExceptionProcessor);
    errorHandler(errorHandlerBuilder);

    from("timer://foo?fixedRate=true&period=10000")
            .log("Received exchange with breadcrumbID:
${in.headers.breadcrumbId}")
            .process(exchange -> {
                LOG.info("Process with bug");
                throw new Exception("Some Bug");
            });

    from("direct:deadletterTest")
            .log("Deadletter received ${body}");

}

*OnExceptionProcessor:*

@Component
public class OnExceptionProcessor implements Processor {

    private static final Logger LOG =
LoggerFactory.getLogger(OnExceptionProcessor.class);

    @Override
    public void process(Exchange exchange) throws Exception {
        LOG.info("Some OnException process");
    }
}

*Log without MDC camel.Breadcrumb:*
2022-01-19 12:01:00,335 INFO  [1 - timer://foo] route1
              [route1 0141fbc5-bb47-4458-a982-1e6585109b8a] - Received
exchange with breadcrumbID: 0141fbc5-bb47-4458-a982-1e6585109b8a
2022-01-19 12:01:00,337 INFO  [1 - timer://foo]
c.t.a.r.h.HelloBreadcrumbRoute           [route1
0141fbc5-bb47-4458-a982-1e6585109b8a] - Process with bug
2022-01-19 12:01:00,338 INFO  [1 - timer://foo]
c.t.a.r.h.OnExceptionProcessor           [****breadcrumbMissing**** ] -
Some OnException process
2022-01-19 12:01:00,344 INFO  [1 - timer://foo] route2
              [route2 ****breadcrumbMissing****] - Deadletter receive



*Example of Custom UnitOfWork as workaround:*

public class CustomUnitOfWork extends DefaultUnitOfWork {

    CustomUnitOfWork(Exchange exchange) {
        super(exchange);
    }

    @Override
    public AsyncCallback beforeProcess(Processor processor, Exchange
exchange, AsyncCallback callback) {

            String breadcrumbId =
exchange.getIn().getHeader(Exchange.BREADCRUMB_ID, String.class);
            if (breadcrumbId != null) {
                MDC.put(MDC_BREADCRUMB_ID, breadcrumbId);
            }

        return super.beforeProcess(processor, exchange, callback);
    }

Reply via email to