apache camel_Apache Camel日志组件示例
apache camel
Apache Camel日志組件示例
您要將消息記錄到底層的記錄機制中,請使用駱駝的log:組件。 Camel使用sfl4j作為記錄器API,然后允許您配置記錄器實現。 在本文中,我們將使用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情況,它也會打印有效負載以及與交換相關的屬性,例如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 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
總結
以上是生活随笔為你收集整理的apache camel_Apache Camel日志组件示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓好用市场推荐(安卓好用市场)
- 下一篇: 电脑版邮箱客户端下载(电脑版邮箱客户端下