CompletableFuture tem um contexto local correspondente?

Antigamente, tínhamos o ThreadLocal para os programas transportarem dados junto com o caminho da solicitação, pois todo o processamento da solicitação era feito nesse segmento e coisas como o logback usavam isso com MDC.put ("requestId", getNewRequestId ());

Então a scala e a programação funcional apareceram e os futuros apareceram e com eles veio o Local.scala (pelo menos eu sei que o twitter Futures tem essa classe). O Future.scala conhece o Local.scala e transfere o contexto através de toda a funcionalidade map / flatMap, etc. etc., para que eu ainda possa executar o Local.set ("requestId", getNewRequestId ()); e depois a jusante depois de percorrer muitos threads, ainda posso acessá-lo com Local.get (...)

Então, minha pergunta está em java, posso fazer a mesma coisa com o novo CompletableFuture em algum lugar com LocalContext ou algum objeto (não tenho certeza do nome) e, dessa forma, posso modificar o contexto do MDC de logback para armazená-lo nesse contexto em vez de um ThreadLocal para que eu não perca o ID da solicitação e todos os meus logs no thenApply, thenAccept etc. etc. ainda funcionem bem com o log e com o sinalizador -XrequestId na configuração de logback

EDITAR:

Como um exemplo. Se você receber uma solicitação e estiver usando log4j ou logback, em um filtro, definirá MDC.put ("requestId", requestId) e, em seu aplicativo, registrará muitas instruções de log

log.info("request came in for url="+url);
log.info("request is complete");

Agora, na saída do log, ele mostrará

INFO {time}: requestId425 request came in for url=/mypath
INFO {time}: requestId425 request is complete

Isso está usando um truque do ThreadLocal para conseguir isso. No twitter, usamos scala e twitter Futures em scala, juntamente com uma classe Local.scala. Local.scala e Future.scala estão interligados, pois podemos alcançar o cenário acima ainda muito agradável e todas as nossas instruções de log podem registrar o ID da solicitação, para que o desenvolvedor nunca precise se lembrar de registrar a ID da solicitação e você pode rastrear através um único cliente solicita um ciclo de resposta com esse ID.

Não vejo isso em java :( o que é muito lamentável, pois há muitos casos de uso para isso. Talvez haja algo que não estou vendo?

questionAnswers(1)

yourAnswerToTheQuestion