gpt4 book ai didi

Apache Camel MDC 从 Body 添加字段

转载 作者:行者123 更新时间:2023-12-03 21:36:06 26 4
gpt4 key购买 nike

我正在使用 apache camel,并想使用 MDC 将某些键添加到我的日志中。我通过官方Camel MDC Logging documentation这是非常棒的。我可以毫不费力地记录我的 routeId。我还需要从 Camel's Body 添加一个字段。

最坏的情况我可以在所有路由中手动添加它,但我想知道是否可以以更简单的方式将字段从 body 添加到 MDC?

任何想法表示赞赏。我真的很想能够做到这一点,而不必进入每条路线并添加一个类轮。

更新:

在我的项目中实现了自定义 MDCUnitOfWork 和 Factory。我能够看到 CustomUnitOfWorkFactory 创建我的 CustomUnitOfWork 然后设置 MDC 值。

但是我注意到这只发生在路线的开头。

在我的用例中,我将轮询 Amazon SQS 作为我的第一条路线。我这里没有所需的信息。在第一条 route ,我构建了我的 Context 并将其设置为 Camel body,这是我需要在 MDC 中设置的信息所在的位置。

是否也可以在第二条路线之前创建 UnitOfWork?

最佳答案

这是基于 Claus 建议的代码的完整实现。我们使用的是 Spring Boot ,但根据您的需要进行调整

自动注册一个简单的 bean

@Bean
public CamelContextConfiguration contextConfiguration() {
return new CamelContextConfiguration() {
@Override
public void beforeApplicationStart(CamelContext context) {
context.setUseMDCLogging(true);
context.setUnitOfWorkFactory(MyUnitOfWork::new);
}

@Override
public void afterApplicationStart(CamelContext camelContext) {
}
};
}

然后,创建您的自定义工作单元单元
public class MyUnitOfWork extends MDCUnitOfWork {
public MyUnitOfWork(Exchange exchange) {
super(exchange);
if( exchange.getProperty("myProp") != null){
MDC.put("myProp", (String) exchange.getProperty("myProp"));
}
}
}

在您的 logback/log4j 配置中,使用 myProp 值,如下所示:
%X{myProp}

它应该开始记录

关于Apache Camel MDC 从 Body 添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com