焦点要闻:camel_Apache Camel日志组件示例
camel
Apache Camel日志组件示例
(资料图片仅供参考)
您要将消息记录到底层的记录机制中,请使用骆驼的log:组件。 Camel使用sfl4j作为记录器API,然后允许您配置记录器实现。 在本文中,我们将使用Log4j作为实际的记录器机制。 让我们从我们的例子开始。
依存关系
您需要添加:
slf4j-api– SLF4J Logger API slf4j-log4j12– Log4j作为记录器的实现
pom.xml:
4.0.0com.javarticles.camelcamelHelloWorld0.0.1-SNAPSHOTorg.apache.camelcamel-core2.15.1org.apache.camelcamel-stream2.15.1org.apache.camelcamel-jms2.15.1org.apache.activemqactivemq-camel5.6.0org.springframeworkspring-context4.1.5.RELEASEorg.apache.camelcamel-spring2.15.1org.slf4jslf4j-api1.7.12org.slf4jslf4j-log4j121.7.12
日志组件URI格式
日志的uri格式:
log:loggingCategory[?options]
您可以使用选项来设置级别或格式选项。 例如:
log:com.javarticles?level=INFO
在我的log4.properties中,root logger记录到文件以及控制台,而它仅记录com.javarticles类别的文件。 log4j.properties:
# Root logger optionlog4j.rootLogger=INFO, file, consolelog4j.logger.com.javarticles=INFO, file# Direct log messages to a log filelog4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=javarticles.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d | %p | %F %L | %m%n # Direct log messages to stdoutlog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target=System.outlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%d{HH:mm}| %p | %F %L | %m%n
骆驼原木组件示例
CamelLog示例:
package com.javarticles.camel.components;import org.apache.camel.CamelContext;import org.apache.camel.ProducerTemplate;import org.apache.camel.builder.RouteBuilder;import org.apache.camel.impl.DefaultCamelContext;import org.apache.camel.util.jndi.JndiContext;public class CamelLogExample {public static final void main(String[] args) throws Exception {JndiContext jndiContext = new JndiContext();jndiContext.bind("stringUtils", new StringUtils());CamelContext camelContext = new DefaultCamelContext(jndiContext);try {camelContext.addRoutes(new RouteBuilder() {public void configure() {from("direct:logExample") .log("Before converting to uppercase") .to("log:?level=INFO&showBody=true").to("bean:stringUtils?method=upperCase").log("After converting to uppercase").to("log:com.javarticles?level=INFO&showAll=true");}});ProducerTemplate template = camelContext.createProducerTemplate();camelContext.start();template.sendBody("direct:logExample", "Log me!");} finally {camelContext.stop();}}}
输出:
12:09| INFO | DefaultCamelContext.java 2454 | Apache Camel 2.15.1 (CamelContext: camel-1) started in 0.307 seconds12:09| INFO | MarkerIgnoringBase.java 95 | Before converting to uppercase12:09| INFO | MarkerIgnoringBase.java 95 | Exchange[ExchangePattern: InOnly, BodyType: String, Body: Log me!]12:09| INFO | MarkerIgnoringBase.java 95 | After converting to uppercase12:09| INFO | MarkerIgnoringBase.java 95 | Exchange[Id: ID-INMAA1-L1005-54363-1431153589693-0-2, ExchangePattern: InOnly, Properties: {CamelCreatedTimestamp=Sat May 09 12:09:50 IST 2015, CamelMessageHistory=[DefaultMessageHistory[routeId=route1, node=log1], DefaultMessageHistory[routeId=route1, node=to1], DefaultMessageHistory[routeId=route1, node=to2], DefaultMessageHistory[routeId=route1, node=log2], DefaultMessageHistory[routeId=route1, node=to3]], CamelToEndpoint=log://com.javarticles?level=INFO&showAll=true}, Headers: {breadcrumbId=ID-INMAA1-L1005-54363-1431153589693-0-1}, BodyType: String, Body: LOG ME!, Out: null: ]12:09| INFO | DefaultCamelContext.java 2660 | Apache Camel 2.15.1 (CamelContext: camel-1) is shutting down
自定义Exchange格式化程序
如果您在上述日志中注意到,即使对于showBody=true情况,它也会打印有效负载以及与交换相关的属性,例如ExchangePattern和BodyType。 我们可以自定义想要在日志中看到的内容。 让我们看看如何实现它。 通过实现ExchangeFormatter接口来实现自定义格式器类。 从Exchange对象中选择我们要记录的元素。 在我们的自定义交换格式化程序中,我们只想查看有效负载文本,因此format(Exchange)返回的是入站请求消息。 MyExchangeFormatter:
package com.javarticles.camel.components;import org.apache.camel.Exchange;import org.apache.camel.spi.ExchangeFormatter;public class MyExchangeFormatter implements ExchangeFormatter { public String format(Exchange exchange) { return exchange.getIn().getBody(String.class); }}
您需要将foamtter对象与键logFormatter。
jndiContext.bind("logFormatter", new MyExchangeFormatter());
CamelLogExchangeFormatter示例:
package com.javarticles.camel.components;import org.apache.camel.CamelContext;import org.apache.camel.ProducerTemplate;import org.apache.camel.builder.RouteBuilder;import org.apache.camel.impl.DefaultCamelContext;import org.apache.camel.util.jndi.JndiContext;public class CamelLogExchangeFormatterExample {public static final void main(String[] args) throws Exception {JndiContext jndiContext = new JndiContext();jndiContext.bind("stringUtils", new StringUtils());jndiContext.bind("logFormatter", new MyExchangeFormatter());CamelContext camelContext = new DefaultCamelContext(jndiContext);try {camelContext.addRoutes(new RouteBuilder() {public void configure() {from("direct:logExample") .log("Before converting to uppercase") .to("log:?level=INFO").to("bean:stringUtils?method=upperCase").log("After converting to uppercase").to("log:com.javarticles?level=INFO");}});ProducerTemplate template = camelContext.createProducerTemplate();camelContext.start();template.sendBody("direct:logExample", "Log me!");} finally {camelContext.stop();}}}
StringUtils:
package com.javarticles.camel.components;public class StringUtils {public String upperCase(String msg) {return msg.toUpperCase();}}
输出:
14:28| INFO | MarkerIgnoringBase.java 95 | Before converting to uppercase14:28| INFO | MarkerIgnoringBase.java 95 | Log me!14:28| INFO | MarkerIgnoringBase.java 95 | After converting to uppercase14:28| INFO | MarkerIgnoringBase.java 95 | LOG ME!
吞吐量记录器示例
消息(本例中为数字)被发送到activemq队列numbers,路由中的下一个目标将每10秒记录一次消息统计信息。 使用groupInterval=10000选项配置间隔。
applicationContext.xml:
CamelThroughputLogger示例:
package com.javarticles.camel.components;import org.apache.camel.CamelContext;import org.apache.camel.ProducerTemplate;import org.apache.camel.spring.SpringCamelContext;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CamelThroughputLoggerExample {public static final void main(String[] args) throws Exception {ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);try {ProducerTemplate template = camelContext.createProducerTemplate();camelContext.start();for (int i = 0; i<18000; i++) { template.sendBody("activemq:queue:numbers", i);}Thread.sleep(10000);} finally {camelContext.stop();}}}
输出:
19:04| INFO | MarkerIgnoringBase.java 95 | Received: 281 new messages, with total 281 so far. Last group took: 470 millis which is: 597.872 messages per second. average: 597.87219:04| INFO | MarkerIgnoringBase.java 95 | Received: 14802 new messages, with total 15083 so far. Last group took: 10001 millis which is: 1,480.052 messages per second. average: 1,440.45519:05| INFO | MarkerIgnoringBase.java 95 | Received: 2917 new messages, with total 18000 so far. Last group took: 10000 millis which is: 291.7 messages per second. average: 879.293
下载源代码
这是一个关于骆驼原木组件的例子。 您可以在此处下载源代码: camelLogComponentExamples.zip
camel
标签:
相关推荐:
最新新闻:
- 最新手机壳价格怎样?最新手机壳报价大全
- 视讯!ios8越狱后必装插件有哪些?ios8越狱后必装插件汇总
- 视频会议系统是什么意思?有哪些功能?-当前速看
- vr场景怎么做?VR视频制作教程|每日信息
- 微信塞班版为什么退出后会自动启动?问题出在哪里?
- Android 代码中文字在手机上显示乱码怎么办?解决方法_环球今亮点
- abb变频电机怎么样?abb变频电机价格是多少?
- 英语字母表你会背吗?26个英语字母表及字母音标
- 联想笔记本一键恢复7.0怎么用?详细方法步骤-天天快看点
- Word文档中如何输入汉字的偏旁部首?输入汉字的偏旁部首方法
- 一次汇报的内容有多页 如何用母版做美化?
- 世界速看:什么叫信息化管理?信息化管理相关介绍
- 苹果颠覆MP3 手机业的“创新”是怎么做到的?|环球报道
- 地磁场的基本形态与演化 你知道多少?
- bose家庭影院好吗?bose家庭影院有哪些优势?
- 世界速读:金松冰箱怎么样?金松冰箱多少钱?详细介绍
- 如何实现国产化替代?博思得凭借新一代OX平台技术做到了_世界速讯
- PS分配内存不足怎么办?解决方案来了
- 焦点要闻:camel_Apache Camel日志组件示例
- 全球热门:电商数据分析中的基础分析项目——京东订单数据预处理
- 天天微头条丨摩托罗拉xt532怎么刷机?摩托罗拉xt532刷机教程介绍
- 焦点速讯:高效空气过滤器有什么作用?高效空气过滤器作用介绍
- 人工生命中最关键的一步——虚拟细胞的构建|全球今日报
- GE带以太网接口的CPU协议有哪些特性?详情介绍
- nokia5300怎么刷机?nokia5300刷机教程及手机优势
- 百度闪付如何添加银行卡?百度闪付添加银行卡方法
- 环球观热点:反间计你知道吗?史上最经典的10大反间计
- getParameter和getAttribute的区别是什么?区别介绍 全球最资讯
- 如何在Win10登陆界面添加签名?Win10登陆界面添加签名方法
- 中国电池企业前十名有哪些?中国电池企业前十名介绍
- 中国互联网10大平台 2010年中国互联网十大开放平台大盘点
- 怎么打开优酷的kux格式?kux转换成mp4的方法 快看
- 常用的数学函数 数据分析最常用的excel函数公式大全 世界快看
- 德国曼瑞德温控器怎么样?德国曼瑞德温控器介绍
- d3dx9_34.dll是什么?系统d3dx9_34.dll错误会带来什么危害?|每日播报
- 华为nova5手机无法开机怎么办?华为nova5手机维修
- 什么是实数?数轴上的点与实数是什么意思?
- 下载软件哪个好?迅雷、迅雷和比特彗星下载工具介绍 全球微动态
- 科幻小说作家赫内·巴赫札维勒:时间旅行的悖论-全球滚动
- 什么是pdi检测?Pentaho数据集成的步骤
- 速递!FTP中文件名乱码问题怎么解决?Serv-U8字符编码的设置
- 如何使用任务计划程序来定时启动?黑客干货教程!-焦点消息
- JAVA模拟器安装方法 JAVA模拟器全功略!
- iPhone 15 采用 MFI 认证 C 口,没认证还是 5W
- 《生化危机4重制版》豪华版 将包含13个DLC|世界快资讯
- 30秒广告700万美元 “美国春晚”超级碗广告费创纪录-环球时快讯
- 抖音奔着超级APP2.0就去了|微速讯
- 户口迁移证怎么办理_户口迁移证办理方法
- Redmi K60官降:512GB仅2999元
- Redmi K60官宣降至2999元:目标普及512GB大内存-每日观察
- 卢伟冰出手了!512G 版 Redmi K60 降至 3000 元以内_世界新动态
- 摄像头绝了!索尼Xperia 1 V渲染图曝光 观察
- 全球要闻:ChatGPT爆火:谷歌开始检查Bard AI代码数据
- 环球即时:小米 13 Lite 手机渲染图曝光:采用灵动岛设计
- 《CSGO》G2夺冠IEM卡托维兹 尼公子四进决赛终圆梦|全球速看
- 女子多设备同时登腾讯视频账号被封 解锁需超级会员_报资讯
- 世嘉新作《404 GAME RE:SET》公开新人物介绍 2023年春上线
- 开发商十分忙碌 《控制2》已进入概念验证阶段-热门看点
- 环球热讯:封杀《霍格沃茨之遗》的论坛运营者狂玩本作:太香了
- 【环球播资讯】情人节送巧克力,是不是没诚意?
- 聚焦:融资丨「派迅智能」完成数亿元B轮融资,赛富投资基金领投
- 年轻人选择“包地创业”,这门生意究竟有没有前景?
- 环球新资讯:“吃得多,还是瘦?”妻子一句话,丈夫查出大问题
- 赚钱新招儿!苹果的iPhone硬件订阅可能会在三月份到来_当前热议
- iPhone 15都没这功能!工程师通过添加USB-C制造双端口iPhone-环球快看点
- “灵动岛”双前摄设计!小米13 Lite曝光:天天关注
- 入职1小时被HR告知招错人补偿50元 当事人:很无奈
- 《生化危机4:重制版》豪华版带14款DLC 有专属藏宝图内容:环球微动态
- 《异修罗》确定制作TV动画 梶裕貴上田丽奈主演
- 创造新历史!IEM卡托维兹站《星际争霸2》中国选手李培楠夺冠
- 暴雪公布《暗黑破坏神》官方食谱 售价35美元
- 天天新消息丨From社公开大量《艾尔登法环》主题周边手办 多姿多彩
- 我在土耳其重灾区:仅一天内就看到13具遗体-全球微资讯
- 热讯:TP-Link机器人吸尘器可以连续两周不清空
- 世界信息:脑机接口公司运送危险生物制品