37.10. 日志输出的完整自定义
通过这个部分中所述的选项,您可以控制日志记录器的许多输出。但是,日志行始终遵循以下结构:
Exchange[Id:ID-machine-local-50656-1234567901234-1-2, ExchangePattern:InOut, Properties:{CamelToEndpoint=log://org.apache.camel.component.log.TEST?showAll=true, CamelCreatedTimestamp=Thu Mar 28 00:00:00 WET 2013}, Headers:{breadcrumbId=ID-machine-local-50656-1234567901234-1-1}, BodyType:String, Body:Hello World, Out: null]
在某些情况下这种格式不可理解,这可能是因为您需要…
- 过滤打印的标头和属性,使其在 Insights 和详细程度之间平衡。
- 将日志消息调整为您认为最易读的任何内容。
- 通过日志减系统(如 Splunk)定制用于摘要的日志消息。
- 以不同的方式打印特定的正文类型。
每当需要绝对自定义时,您可以创建一个实施接口的类。在访问完整交换 的格式(Exchange)
方法中,以便您可以选择并提取所需的准确信息,以自定义方式对其进行格式化并返回它。返回值将成为最终日志消息。
您可以通过以下两种方式之一获取您的自定义 ExchangeFormatter
:
在 Registry 中显式实例化 LogComponent:
<bean name="log" class="org.apache.camel.component.log.LogComponent"> <property name="exchangeFormatter" ref="myCustomFormatter" /> </bean>
37.10.1. 与配置相关的惯例
只需将 bean 替换为名称 logFormatter
; 日志组件就足够智能,以便自动获取它。
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
ExchangeFormatter
应用到该 Camel 上下文中的所有日志端点。如果您需要不同的端点使用不同的 ExchangeFormatter,请根据需要实例化 LogComponent,并使用相关的 bean 名称作为端点前缀。
使用自定义日志格式时,您可以在 log uri 中指定参数,该参数在自定义日志格式器上配置。虽然当您这样做时,您应该将"logFormatter"定义为,因此如果您具有不同的参数,则不会共享,例如:
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" scope="prototype"/>
然后,我们可以使用带有不同选项的 log uri 的 Camel 路由:
<to uri="log:foo?param1=foo&param2=100"/> <to uri="log:bar?param1=bar&param2=200"/>