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

hen*_*nnr 1 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>
Run Code Online (Sandbox Code Playgroud)

问题是我是否应该使用 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>
Run Code Online (Sandbox Code Playgroud)

你认为呢?WireTap还是上面的解决方案?

Cla*_*sen 5

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

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