热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ApacheCamelMDC从Body添加字段

如何解决《ApacheCamelMDC从Body添加字段》经验,为你挑选了1个好方法。

我正在使用apache camel并希望使用MDC将某些键添加到我的日志中.我浏览了官方的Camel MDC Logging文档,非常棒.我能够毫不费力地记录我的routeId.我还需要添加Camel's Body的字段.

最糟糕的情况我可以在所有路由中手动添加它,但我想知道是否可以更容易地从body添加字段到MDC?

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

更新:

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

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

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

是否有可能在第二条路线之前创建UnitOfWork?



1> sat..:

这是一个完整的实现,其代码基于Claus的推荐.我们使用的是弹簧靴,但可根据您的需要进行调整

自动注册一个简单的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}

它应该开始记录


推荐阅读
author-avatar
张明怡紫茂佳尧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有