架构

跟踪器

师成师成· 更新于 2026-09-28· 阅读 9 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

追踪器(Tracer)

Camel 的追踪器用于在路由过程中记录消息的详细信息,你可以实时看到每条消息所经过的路由路径。消息的其他详细信息,例如消息体和消息头,也会被记录下来。

还有另一种追踪器,它会将消息捕获到积压追踪器(Backlog Tracer)中,以便按需进行追踪。例如 Camel CLI、Hawtio 等工具就使用了这种方式。

启用追踪

只需设置一个标志,即可轻松启用日志追踪。

  • Java
  • Spring XML
  • Application Properties

在 CamelContext 上启用追踪:

context.setTracing(true);
<camelContext trace="true" xmlns="http://camel.apache.org/schema/spring">
...
</camelContext>

例如在使用 Spring Boot 或 Quarkus 时。

camel.main.tracing = true

设置待机模式下的追踪

默认情况下,Camel 会对追踪进行优化并默认关闭。因此,你需要么在启动时启用追踪,要么开启待机模式,以便在运行时稍后启用追踪。

使用 Camel Main 或 Camel CLI 并采用 dev 配置(默认值)时,追踪待机状态会自动启用。这意味着你可以在运行时随时开启和关闭追踪,而无需重启。

要将追踪设置为待机模式,可以这样做:

  • Java
  • Spring XML
  • Application Properties
context.setTracingStandby(true);
<camelContext trace="standby" xmlns="http://camel.apache.org/schema/spring">
...
</camelContext>

例如在使用 Spring Boot 或 Quarkus 时

camel.main.tracing-standby = true

如果 Tracer 处于待机模式,则跟踪功能处于可用状态,可在运行时稍后启用。这需要通过 JMX 或 Java 来打开跟踪功能:

例如,使用 Java 的方式:

Tracer tracer = context.getTracer();
tracer.setEnabled(true);

跟踪日志格式

跟踪器(Tracer)会将 Exchange 的执行过程格式化为日志行,并以 INFO 级别记录到日志类别 org.apache.camel.Tracing 中。

Exchange 中的消息信息使用 ExchangeFormatter 进行格式化,其默认实现提供了许多可配置选项,详见 javadoc。

跟踪器输出日志时会加上前缀,包含以下信息:

  • arrow -(表示输入还是输出的方向)
  • routeId - 当前路由
  • label - 当前 EIP 节点

该输出使用以下默认格式进行组装:

%-4.4s [%-12.12s] [%-33.33s]

可以自定义默认格式,例如让列宽更大:

  • Java
  • Spring XML
  • Application Properties
context.setTracingLoggingFormat("%-4.4s [%-30.30s] [%-50.50s]");
<camelContext trace="true" traceLoggingFormat="%-4.4s [%-30.30s] [%-50.50s]">
...
</camelContext>
camel.main.tracing-logging-format = %-4.4s [%-30.30s] [%-50.50s]

配置消息体的最大长度

当 Camel 启用日志记录运行时,它会不时地记录消息及其内容。

由于某些消息可能包含非常大的负载,Camel 默认会截断日志消息,仅显示前 1000 个字符。

你会在日志中看到如下内容:

DEBUG ProducerCache                  - >>>> Endpoint[direct:start] Exchange[Message: 01234567890123456789... [Body clipped after 20 chars, total length is 1000]]
  • Java
  • 应用属性

在 Java 中,你可以将最大长度设置为全局选项。

context.getGlobalOptions().put(Exchange.LOG_DEBUG_BODY_MAX_CHARS, "500");

你也可以在 application.properties 中设置该限制。

camel.main.globalOptions[CamelLogDebugBodyMaxChars] = 500
你可以自定义 Camel 在日志中截断消息体的长度限制。将限制设为 0 表示不限制,即显示完整的消息体;设置为负值(例如 -1)则表示完全不记录消息体。

另请参阅

评论

登录后参与评论

正在加载评论…