记录源应用程序错误通道

时间:2018-06-08 21:12:11

标签: spring-cloud-stream spring-cloud-sleuth

我有一个使用RabbitMQ事件总线的系统设置和使用spring cloud stream的应用程序。为了帮助跟踪系统中的消息,我还使用了spring-cloud-sleuth

我遇到的问题涉及errorChannel流/绑定。我没有在配置中使用error绑定(指this)。相反,我有一个流设置来监听errorChannel,它会为消息添加一个额外的标头,然后将其发送到错误目的地。它看起来类似于下面(用Groovy编写):

IntegrationFlows
  .from('errorChannel')
  .log()
  .handle(MessagingException, {e, h -> 
      def message = MessageBuilder.withPayload(e).copyHeaders(h).setHeader('name', 'myApp').build()
      errorSource.channel().send(message)
  .channel('nullChannel')
  .get()

errorSource的频道声明为@Output

日志行输出类似于:

的内容

INFO [myApp,1234,4321,false] LoggingHandler: ErrorMessage [...]

但是,当我从错误目标收到消息时,X-B3-ParentSpanId标头中的值与上面日志消息中的span id(4321值)或记录在其中的任何其他span id不匹配来源申请。

我能看到匹配的唯一方法是将org.springframework.cloud的日志记录提交到DEBUG,即使这样,它也是来自TracingChannelInterceptor的日志行(尽管该实例看起来属于errorChannel的拦截器列表,所以我觉得我很接近)。我宁愿不要离开DEBUG,因为它显然会非常嘈杂。

毕竟,问题是我是否可以在错误通道或绑定本身上设置任何日志记录,这些日志记录会输出一些日志行,其跨度id与X-B3-ParentSpanId标题中的内容相匹配?目的是获取该span id并保存它,以便以后可以在检查日志时使用它直接进入源应用程序。

我们也正在保存跟踪ID,我看到它很好(并匹配源应用程序的跟踪ID),但将跟踪和跨度ID放在一起会很有帮助。

1 个答案:

答案 0 :(得分:0)

MessagingException具有failedMessage属性;你应该在它的标题中找到你需要的东西。

相关问题