[英]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
當我問這個問題時,我才剛開始騎駱駝。 在此期間,我發現了一些理想的實現目標的方法。 因此,如果其他人正在尋找該問題的答案:
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.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(...);
( 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.