【问题标题】:Apache camel bindy - how to log or debugApache camel bindy - 如何记录或调试
【发布时间】:2014-10-21 12:46:37
【问题描述】:

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

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

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

提前致谢 阿杰

【问题讨论】:

  • 您可以尝试按 ctrl-break/ctrl-\ 来生成核心转储。然后,您可以开始设置断点并在正确的位置调试绑定代码。 Camel 的来源通常很清楚。

标签: debugging logging apache-camel eip bindy


【解决方案1】:

在 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)。在那里定义日志级别、附加程序等

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 

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

请记住,URLs "level=" 选项的日志级别的严重性必须等于或高于您在 log4j.properties 文件中定义的级别

2。第二种方法

定义一个 DebugProcessor 为您记录异常并将其放在您的路由中,紧跟在处理器之后,它的行为很神秘

2.1 编写一个DebugProcessor 处理器必须实现 公共无效进程(交换交换)抛出异常{

如果您想知道为什么找不到任何异常

exchange.getException()

尝试使用检索它

Exception exception = (Exception) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);

对这个异常做任何你想做的事(登录到 sysout,...)

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

DebugProcessor debugProcessor1 = new DebugProcessor();

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

3。第三种方法

使用骆驼 .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");

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

现在您的路由中不需要任何额外的处理器或日志记录:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多