如何正确记录骆驼中的消息/路由(流)?

时间:2012-08-22 15:53:04

标签: java logging apache-camel

我正在使用Apache camel将一些SOAP消息从A路由到B。

我想为某些特定路由添加日志记录,但问题是邮件正文是一个流。

我的解决方案是将该流转换为字符串,然后将其发送到端点B.

这似乎工作正常,但我不确定这种方法有多干净?

这就是我的路线现在的样子:

<route>
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" />
    <convertBodyTo type="java.lang.String"/>
    <to uri="log:my.company?level=WARN"/>
    <to ref="ServiceB" />
</route>

问题是我是否应该使用wireTap和流缓存来复制流,将其转换为字符串,记录它并将其他未触动的流发送到ServiceB。 我找不到合适的方法。这是我尝试这样做的:

<route streamCache="true">
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" />
    <wireTap uri="log:my.company?level=WARN" /> <!-- how to convert this stream to a string? -->
    <to ref="ServiceB" />
</route>

那么,你怎么说? WireTap或上述解决方案?

1 个答案:

答案 0 :(得分:4)

您只需在日志端点上启用showStreams = true选项即可。然后它也会记录流;并且你不需要在此之前转换身体。您仍然需要启用流缓存,以确保在以后继续处理邮件时可以重新读取流。

从其文档中查看日志组件的选项:http://camel.apache.org/log