Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging ApacheCamel bindy-如何记录或调试_Debugging_Logging_Apache Camel_Eip_Bindy - Fatal编程技术网

Debugging ApacheCamel bindy-如何记录或调试

Debugging ApacheCamel bindy-如何记录或调试,debugging,logging,apache-camel,eip,bindy,Debugging,Logging,Apache Camel,Eip,Bindy,我想从camel bindy那里得到一些日志信息。我有一个使用BindyCsvDataFormat bindyProduct的工作设置,其中有一个带注释的产品bean和一个csv文件作为源 现在我更改了CSV文件和带注释的bean。处理接缝可能会卡在bindy处理器中,但我没有得到任何信息/日志。我的调试处理器根本无法访问。如果我把它放在解组步骤之前,那么它会记录一些东西,我可以调试到其中。我想知道为什么新文件不再适合/匹配,为什么没有日志或异常或任何有帮助的东西 from("f

我想从camel bindy那里得到一些日志信息。我有一个使用BindyCsvDataFormat bindyProduct的工作设置,其中有一个带注释的产品bean和一个csv文件作为源

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

        from("file:csv-testdata")
        .unmarshal(bindyProduct)    
        .process(debugProcessor)
提前谢谢 AJ

在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>
可在此处找到所有选项的列表 你可以用

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

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

2.第二种方法 定义一个DebugProcessor,为您记录异常,并将其放在您的路由中,就在处理器之后,该处理器的行为非常神秘 2.1编写调试处理器 处理器必须实现 公共作废进程(Exchange)引发异常{

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

exchange.getException()
尝试使用

Exception exception = (Exception) exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
对该异常执行任何您喜欢的操作(登录到sysout,…)

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

3.第三种方法 使用camels.doTry()/.doCatch()或(可能更好)使用OneException()路由 (/camel.apache.org/try-catch-finally.html)

3.1构建与要调试的路由分离的OneException()路由

以下OneException路由聚合异常,并以一种良好的、人类可读的方式(通过velocity模板)将它们记录下来,每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(...);

您可以尝试按ctrl-break/ctrl-\生成核心转储。然后可以开始设置断点并在正确的位置调试bindy代码。Camel源代码通常非常清晰。
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(...);