我已经定义了一个错误处理程序,它适用于多个路由,即
errorHandler(transactionErrorHandler()
.maximumRedeliveries(5)
.log("SOMETHING USELESS");
from(file1)
.id(route1)
.transacted()
.process(new SpecificProcessor1());
from(file2)
.id(route2)
.transacted()
.process(new SpecificProcessor2());
当其中一个SpecificProcessor类内发生异常时,将记录以下内容:
[10-Jan-2014 15:08:59.449] [Error] SOMETHING USELESS: Failed delivery for (MessageId: ID-BLAH BLAH). On delivery attempt: 1 caught: java.lang.Exception: cannot do whatever I'm supposed to do
现在我想打印一些有用的东西,以帮助确定在route1或route2中是否发生了异常,即:
[10-Jan-2014 15:08:59.449] [Error] ROUTE 1: Failed delivery for (MessageId: ID-BLAH BLAH). On delivery attempt: 1 caught: java.lang.Exception: cannot do whatever I'm supposed to do
我怎样才能做到这一点?
我尝试过像.log($ {routeId})之类的东西,但它不起作用。
非常感谢!
答案 0 :(得分:0)
您可以为appender配置添加线程名称。例如log4j的%t:
<appender name="..." class="...">
....
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss,SSS} %p %t %c - %m%n" />
</layout>
</appender>
你会看到类似的东西:
13/01/2014 12:52:33,535 INFO Camel (mainCamelContext) thread #8 - JmsConsumer[jms/customer] .....
我想这足以识别路线
答案 1 :(得分:0)
要指定路由名称,理想情况下应使用.routeid()而不是.id() - 后者设置节点名称,而不是路由名称:
from(file1).routeId(route1)
您可以提取路由ID,您可以使用exchange.getFromRouteId(),它将返回创建交换的路由ID。如果使用直接组件嵌套路径,则可以使用工作单元,如下所示:
exchange.getUnitOfWork().getRouteContext().getRoute().getId()
不确定是否存在使用DSL检索此信息的机制。
我希望这会有所帮助。