簡體   English   中英

Apache駱駝綁定-如何記錄或調試

[英]Apache camel bindy - how to log or debug

我正在嘗試從駱駝綁定中獲取一些日志信息。 我有一個使用BindyCsvDataFormat bindyProduct的工作設置,帶有帶注釋的product-bean和一個csv文件作為源。

現在,我更改了CSV文件和帶注釋的bean。 處理縫被卡在綁定處理器中,但是我沒有得到任何信息/日志。 根本沒有達到我的debugProcessor。 如果我將其放在解組步驟之前,則它會記錄一些內容,並且我可以對其進行調試。 我不知道為什么新文件不再適合/匹配,為什么沒有日志或異常或其他任何幫助。

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

在此先感謝AJ

在Apache駱駝中記錄異常

當我問這個問題時,我才剛開始騎駱駝。 在此期間,我發現了一些理想的實現目標的方法。 因此,如果其他人正在尋找該問題的答案:

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 

記錄所有信息,例如標題,屬性,主體等

請記住,URL“ level =”選項的日志級別的嚴重性必須等於或高於您在log4j.properties文件中定義的級別。

2.第二種方法

定義一個DebugProcessor為您記錄Exception並將其放在處理器之后的路由中,該行為表現得很神秘

2.1編寫DebugProcessor處理器必須實現公共無效過程(Exchange交換)引發Exception {

如果您想知道為什么在以下位置找不到任何異常

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");

這只是一個例子,您可以做任何您想做的事,駱駝可以做的事,例如將它們作為郵件發送,放入數據庫等。

您現在不需要在路由中添加任何額外的處理器或日志記錄內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM