Apache camel bindy - 如何记录或调试

时间:2014-10-21 12:46:37

标签: debugging logging apache-camel eip bindy

我正在尝试从camel bindy获取一些日志信息。我有一个使用BindyCsvDataFormat bindyProduct的工作设置,带有带注释的product-bean和csv文件作为源。

现在我更改了CSV文件和带注释的bean。处理接缝陷入束缚处理器,但我没有得到任何信息/日志。根本没有达到我的debugProcessor。如果我把它放在unmarshal步骤之前,那么它会记录一些东西,我可以调试它。我想知道为什么新文件不再匹配/匹配,为什么没有日志或异常或任何帮助。

        from("file:csv-testdata")
        .unmarshal(bindyProduct)    
        .process(debugProcessor)

提前致谢 AJ

1 个答案:

答案 0 :(得分:2)

在apache camel

中记录异常

当我问这个问题时,我正处于骆驼骑行经历的最初阶段。与此同时,我找到了一些很好的方法来实现,我在寻找什么。因此,如果其他人正在寻找这个问题的答案:

1。第一种方法:

启用项目日志记录,正确配置并通过向路由添加日志记录URL来处理日志记录。

1.1添加用于记录到pom.xml的依赖项,例如

<groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

1.2将log4j.properties文件添加到src / main / resources文件夹(如果要使用log4j)。定义loglevel,appenders等

1.3将记录添加到您的路线

from("...")
.unmarshal(bindyProduct)
.to("log:com.your.package.YourChosenName?level=ERROR&multiline=true&showCaughtException=true")
.to(...);

可以在此处找到所有选项的列表 http://camel.apache.org/log.html 你可以用

&showAll=true 

记录标题,属性,正文等所有信息

请注意,网址的日志级别的严重性&#34; level =&#34; option必须等于或高于您在log4j.properties文件中定义的那个

2。第二种方法

定义一个DebugProcessor,为您记录Exception,并将其放在处理器后面的路径中,行为神秘

2.1编写一个DebugProcessor 处理器必须实现     public void process(Exchange exchange)抛出异常{

如果你想知道为什么你在

中找不到任何异常
exchange.getException()

尝试使用

检索它
Exception exception = (Exception) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);

使用此异常执行您喜欢的操作(登录到sysout,...)

2.2将调试器连接到RouteBuilder Java-Class(或其他地方,Spring,XML,...)中的路由

DebugProcessor debugProcessor1 = new DebugProcessor();

from("...")
.unmarshal(bindyProduct)
.process(debugProcessor1)
.to(...);

3。第三种方法

使用camels .doTry()/。doCatch()或(甚至更好)使用onException()路由

http://camel.apache.org/exception-clause.html / camel.apache.org/try-catch-finally.html)

3.1构建与要调试的路由分开的onException()路由

以下onException路由聚合异常,并以一种漂亮的,人类可读的方式(通过速度模板),每5秒或10次出现来写下它们:

onException(Exception.class) // OR a special excepion (io, etc)
        .aggregate(header("CamelFileParent"),
                new ExceptionAggregationStrategy())
                .completionSize(10).completionTimeout(5000)
        .to("velocity:velocity/errors.log.vm")
        .to("file:camel/xml-out?fileName=errors-${file:name.noext}-${date:now:yyyy-MM-dd_HH-mm-ss-SSS}.log");

这只是一个例子,你可以做任何你想做的事情,骆驼能够做到,例如将它们作为邮件发送,放入数据库等。

您现在不需要任何额外的处理器或记录您的路线:

from("...")
.unmarshal(bindyProduct)
.to(...);