apache camel_Apache Camel日志组件示例

apache camel

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

putchar在c语言中怎么用

点击上方蓝字关注我&#xff0c;了解更多咨询putchar在c语言中的作用是向终端输出一个字符&#xff0c;也属于一种C库函数&#xff0c;包含在C标准库中&#xff0c;putchar是一个字符输出&#xff0c;用于快写的时候很方便。首先来看一下c语言的含义&#xff0c;c语言是一门面向…

mysql设计体会_数据库设计心得体会

组名&#xff1a;NoobStruggle。成员&#xff1a;刘海天、胡亮、谭晓杰、宁君辉。一&#xff0e;分析需求对于每一个项目&#xff0c;数据库的设计都是至关重要的&#xff0c;它关系到后端进行接口开发时实现的难度&#xff0c;数据库中数据的可维护性&#xff0c;一致性&#…

hibernate查询缓存_Hibernate查询缓存如何工作

hibernate查询缓存介绍 现在&#xff0c;我已经介绍了实体和集合缓存&#xff0c;现在该研究查询缓存的工作原理了。 查询缓存与实体严格相关&#xff0c;它在搜索条件和满足该特定查询过滤器的实体之间绘制关联。 像其他Hibernate功能一样&#xff0c;查询缓存也不像人们想象…

windows mysql kip grant tables_数据库mysql数据库mysql: [ERROR] unknown option '--skip-grant-tables'...

mysql数据库报ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO)看到网上说要配置my.ini我的是win10系统&#xff0c;用的是mysql-5.7.18-winx64mysql文件里没有my.ini&#xff0c;在网上看到可以自己建&#xff0c;就家加了一个内容如下&#x…

教你快速了解C语言基本结构

点击上方蓝字关注我&#xff0c;了解更多咨询在步入C语言程序世界之前&#xff0c;不要对C语言产生恐惧感&#xff0c;觉得这种语言应该是学者或研究人员的专利。C语言是人类共有的财富&#xff0c;是普通人只要通过努力学习就可以掌握的知识。下面通过一个简单的程序来看一看C…

hpcc_使用Java将数据流式传输到HPCC

hpcc高性能计算集群&#xff08;HPCC&#xff09;是类似于Hadoop的分布式处理框架&#xff0c;除了它运行以自己的称为企业控制语言&#xff08;ECL&#xff09;的特定领域语言&#xff08;DSL&#xff09;编写的程序外。 ECL很棒&#xff0c;但是偶尔您会想用其他语言来执行繁…

提高mysql insert速度_让你的insert操作速度增加1000倍的方法

大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条insert将会是非常慢的,那么我们如何让我们的inser更快呢。很多时候方法选对了对于我们做事将会是事半功倍。大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条inse…

C语言中同名变量,作用域怎么确定?

点击上方蓝字关注我&#xff0c;了解更多咨询C中通常会声明很多变量&#xff0c;变量有不同的作用域。如果出现同名变量&#xff0c;作用域怎么确定&#xff1f;这里先看结论&#xff1a;块中的变量作用域不同&#xff0c;内层块会隐藏外层块中的定义。但离开内层块后&#xff…

jdk 1.8 jdk8_JDK 8 SummaryStatistics类

jdk 1.8 jdk8JDK 8中引入的三个新类是java.util包的DoubleSummaryStatistics &#xff0c; IntSummaryStatistics和LongSummaryStatistics 。 这些类使计算元素总数&#xff0c;元素的最小值&#xff0c;元素的最大值&#xff0c;元素的平均值以及双精度&#xff0c;整数或long…

mysql哪些xss要转译查询_转义字符的妙用不用引号的字符注入和XSS脚本安全 -电脑资料...

声明&#xff1a;本文纯属YY,如有扯淡之处&#xff0c;请告诉小菜俺 THX在字符型填字游戏中&#xff0c;和&#xff02;往往是决定能否跳出约束进行攻击的关键&#xff0c;于是出现鸟转义字符 \&#xff0c;可以把 &#xff02;变成残废....这恰恰帮助我们改变了字符内部结构…

C语言基础知识干货收藏

点击上方蓝字关注我&#xff0c;了解更多咨询算法结构&#xff1a;一、顺序结构、选择结构、循环结构&#xff1b;二、循环结构又分为while型、until型、for循环结构&#xff1b;程序流程图&#xff1b;结构化程序设计方法&#xff1a;&#xff08;1&#xff09;自顶向下&#…

hazelcast入门教程_Hazelcast入门指南第7部分

hazelcast入门教程这是解释如何使用Hazelcast的系列文章的续篇。 如果一个人没有阅读其他六个帖子&#xff0c;请转到目录并阅读其他帖子。 不同的地图种类 Hazelcast的MultiMap打破了以前使用java.util.Collection接口的常规方式。 实际上&#xff0c;我认为MultiMap的概念完…

python xlrd读取文件报错_python中xlrd库如何实现文件读取?

俗话说得好&#xff0c;技多不压身&#xff0c;虽然我们已经掌握了多种可以实现读取文件的方式&#xff0c;但是丝毫不影响我们要学会精益求精&#xff0c;他说学习文件读取的奥秘&#xff0c;况且&#xff0c;数据分析是十分重要的&#xff0c;一切的代码运行&#xff0c;总归…

c语言 %x,%d,%c,%s,%x各代表什么

点击上方蓝字关注我&#xff0c;了解更多咨询转换说明符%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)%c 字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 浮点数指数输出[e-(E-)记数法]%g(%G) 浮点数不显无意义的零”0″%i 有符号十进制整数(与%d相同)%u 无符号…

apache mesos_Apache Mesos + Marathon和Java EE

apache mesosApache Mesos是一个开放源代码群集管理器&#xff0c;可在分布式应用程序或框架之间提供有效的资源隔离和共享。 Apache Mesos从计算机&#xff08;物理或虚拟&#xff09;中提取CPU&#xff0c;内存&#xff0c;存储和其他计算资源&#xff0c;从而使容错和弹性的…

C语言表达式用法快来看看

点击上方蓝字关注我&#xff0c;了解更多咨询表达式是C语言的主体。在C语言中&#xff0c;表达式由操作符和操作数组成。最简单的表达式可以只含有一个操作数。根据表达式所含操作符的个数&#xff0c;可以把表达式分为简单表达式和复杂表达式两种&#xff0c;简单表达式是只含…

虚拟机间延迟测量_简单的类来测量延迟

虚拟机间延迟测量这是我编写的用于测量延迟的非常简单的类。 HDRHistogram不是劳斯莱斯解决方案&#xff0c;但是如果您只想在项目中添加一个类&#xff0c;那么效果就很好。 这是一个简单的测试程序&#xff0c;向您展示其用法&#xff1a; package util;public class Laten…

python导入模块报错_Python 导入上层目录模块报错

背景&#xff1a;当前demo.py 文件&#xff0c;所处目录 D:\py\test\TestCase&#xff0c;需要调用test 目录下的模块&#xff0c;尝试了 新建__init__.py 文件 import test.模块名的方法&#xff0c;无效.报错信息&#xff1a;D:\py\test\TestCase>python demo.pyTraceback…

java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?

关于Java传参时是引用传递还是值传递&#xff0c;一直是一个讨论比较多的话题。有人说Java中只有值传递&#xff0c;也有人说值传递和引用传递都是存在的&#xff0c;比较容易让人产生疑问。关于值传递和引用传递其实需要分情况看待。一、Java数据类型我们都知道&#xff0c;Ja…

rest接口自动化测试_REST服务的自动化测试

rest接口自动化测试尽管我是Java和Scala开发人员&#xff0c;但我仍然对软件测试充满热情。 如果更精确-Web应用程序。 开发Web应用程序并确保应用程序具有良好的质量真的很有趣。 当我开始职业生涯时&#xff0c;最流行的Web架构是MVC&#xff08;模型视图控件&#xff09;&a…