Apache Camel日志组件示例

您要将消息记录到底层的记录机制,请使用骆驼的log:组件。 Camel使用sfl4j作为记录器API,然后允许您配置记录器实现。 在本文中,我们将使用Log4j作为实际的记录器机制。 让我们从示例开始。

依存关系

您需要添加:

  1. slf4j-api – SLF4J Logger API
  2. slf4j-log4j12 – Log4j作为记录器的实现

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.javarticles.camel</groupId><artifactId>camelHelloWorld</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.camel</groupId><artifactId>camel-core</artifactId><version>2.15.1</version></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-stream</artifactId><version>2.15.1</version></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-jms</artifactId><version>2.15.1</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-camel</artifactId><version>5.6.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.5.RELEASE</version></dependency><dependency><groupId>org.apache.camel</groupId><artifactId>camel-spring</artifactId><version>2.15.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency></dependencies>
</project>

日志组件URI格式

日志的uri格式:

log:loggingCategory[?options]

您可以使用选项来设置级别或格式设置选项。 例如:

log:com.javarticles?level=INFO

在我的log4.properties中,root logger记录到文件以及控制台,而它仅记录com.javarticles类别的文件。 log4j.properties:

# Root logger option
log4j.rootLogger=INFO, file, consolelog4j.logger.com.javarticles=INFO, file# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=javarticles.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d | %p | %F %L | %m%n# Direct log messages to stdout
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.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 seconds
12:09| INFO | MarkerIgnoringBase.java 95 | Before converting to uppercase
12:09| INFO | MarkerIgnoringBase.java 95 | Exchange[ExchangePattern: InOnly, BodyType: String, Body: Log me!]
12:09| INFO | MarkerIgnoringBase.java 95 | After converting to uppercase
12: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情况,它也会打印有效负载以及与交换相关的属性,例如ExchangePatternBodyType 。 我们可以自定义想要在日志中看到的内容。 让我们看看如何实现它。 通过实现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 uppercase
14:28| INFO | MarkerIgnoringBase.java 95 | Log me!
14:28| INFO | MarkerIgnoringBase.java 95 | After converting to uppercase
14:28| INFO | MarkerIgnoringBase.java 95 | LOG ME!

吞吐量记录器示例

消息(本例中为数字)被发送到activemq队列numbers ,路由中的下一个目标将每10秒记录一次消息统计信息。 使用groupInterval=10000选项配置间隔。

<route><from uri="activemq:queue:numbers" /><to uri="log:com.javarticles?level=INFO&groupInterval=10000" />
</route>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"><bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="vm://localhost?broker.persistent=false" /></bean><bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"><property name="connectionFactory" ref="connectionFactory" /></bean><camelContext xmlns="http://camel.apache.org/schema/spring"><route><from uri="activemq:queue:numbers" /><to uri="log:com.javarticles?level=INFO&groupInterval=10000" /></route></camelContext>
</beans>

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.872
19: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.455
19: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

翻译自: https://www.javacodegeeks.com/2015/05/apache-camel-log-component-examples.html

Apache Camel日志组件示例相关推荐

  1. apache camel_Apache Camel日志组件示例

    apache camel Apache Camel日志组件示例 您要将消息记录到底层的记录机制中,请使用骆驼的log:组件. Camel使用sfl4j作为记录器API,然后允许您配置记录器实现. 在本 ...

  2. 适用于ActiveMQ 5.9的Apache Camel Broker组件

    将Apache Camel嵌入ActiveMQ代理可以为使用Camel的集成功能扩展消息代理提供极大的灵活性. Apache Camel路由的另一个好处是,如果使用activemq组件 ,则可以避免远 ...

  3. Apache Camel框架入门示例

    2019独角兽企业重金招聘Python工程师标准>>> Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和中介引擎,提供企业集成模式的Java对象的 ...

  4. apache camel 相关配置_使用Apache Camel文件组件实现自定义流程策略

    迄今的尝试 h2> 我有以下启动处理的路由(名称模糊处理): @Override public void configure() throws Exception { getContext(). ...

  5. apache camel_学习Apache Camel –实时索引推文

    apache camel 在大多数软件开发项目中,有一点需要使应用程序开始与其他应用程序或第三方组件通信. 无论是发送电子邮件通知,调用外部api,写入文件还是将数据从一个地方迁移到另一个地方,您都可 ...

  6. 学习Apache Camel –实时索引推文

    在大多数软件开发项目中,有一点需要使应用程序开始与其他应用程序或第三方组件通信. 无论是发送电子邮件通知,调用外部api,写入文件还是将数据从一个地方迁移到另一个地方,您都可以推出自己的解决方案或利用 ...

  7. 一个Camel Multicast组件聚合策略问题的解决过程

    摘要:本文通过案例,发现了一个Camel Multicast组件聚合策略相关的问题.通过查看Camel源代码,找到了问题原因并给出了解决方案.希望本文可以帮助到遇到同样问题的Camel用户. 本文分享 ...

  8. apache camel_使用Apache Camel进行负载平衡

    apache camel 在此示例中,我们将向您展示如何使用Apache Camel作为系统的负载平衡器. 在计算机世界中,负载平衡器是一种充当反向代理并在许多服务器之间分配网络或应用程序流量的设备. ...

  9. linux反序列化漏洞,Apache Camel Java对象反序列化漏洞(CVE-2015-5348)

    Apache Camel Java对象反序列化漏洞(CVE-2015-5348) 发布日期:2015-12-15 更新日期:2015-12-18 受影响系统:Apache Group Camel 描述 ...

最新文章

  1. [导入]Update实现多表更新
  2. Python selenium 滑块验证--分析与实现
  3. 简明Vim练级攻略(转载)
  4. 分布式系统 c语言,C语言分布式系统中的进程标识!
  5. OSL创始人登上美国知名电视节目宣传DeFi引关注
  6. python快递费用计算_Python制作快递查询系统,来感受到了Python的强大!
  7. Node.js系列——(4)优势及场景
  8. 汽车行业的DMS系统 IT不变应万变
  9. 九大内置对象及四大类
  10. 日语 敬体 简体 作文 对话
  11. gtx1050ti最稳定的驱动_GTX1050ti显卡驱动
  12. weblogic启动慢原因
  13. 白糖详细 制造工艺、等级划分、国家标准号和注意事项
  14. Datax-web版安装(含安装包)
  15. 基于卷积神经网络CNN的图片分类实现——附代码
  16. 关于南通大学教务学生管理公众微信的用户体验。
  17. php两个手机号正则表达式_最新手机号码正则表达式(php版)
  18. 电脑桌面计算机的管理在哪,电脑设备管理器在哪里打开?5种打开方法总有适合你...
  19. 视频弹幕技术 php,HTML5实现视频弹幕功能
  20. 2022年第6周(1月31日-2月6日)中国各地区电影票房排行榜:江苏票房夺冠,河南票房环比增幅最大(附热榜TOP31详单)

热门文章

  1. 使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
  2. 新闻发布项目——实体类(User)
  3. 2020蓝桥杯省赛---java---A---2(既分数组)
  4. 分治算法---汉诺塔
  5. java计算出生到现在经历了多少天
  6. mysql级联复制转换成一主两从_一主两从转级联复制
  7. qmc0转换mp3工具_GoldenRecords for Mac(唱片录音转换软件)
  8. 如何用for循环出数据库的数据
  9. java开发展望怎么写_Java开发趋势:2019年展望
  10. javafx 打印控件_Java的新视差控件(JavaFX)