29.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]
在某些情况下,这种格式并不合理,因为您需要...
- 过滤打印的标头和属性,以便在洞察和详细程度之间实现平衡。
- 将日志消息调整为任何您认为最可读。
- 通过日志最小系统(如 Splunk)为摘要定制日志消息。
- 打印不同的特定正文类型。
每当您需要绝对自定义时,您可以创建一个实施接口的类。在 格式为(Exchange)
方法中,您可以访问完整的 Exchange,以便您选择并提取您需要的信息,以自定义方式格式化并返回。返回值将成为最终日志消息。
您可以通过以下两种方式之一使用 Log 组件使用您的自定义 ExchangeFormatter
:
在 registry 中明确实例化 LogComponent:
<bean name="log" class="org.apache.camel.component.log.LogComponent"> <property name="exchangeFormatter" ref="myCustomFormatter" /> </bean>
29.10.1. 关于配置的惯例
只需使用名称 logFormatter
注册 bean 即可;日志组件足以自动获取它。
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
ExchangeFormatter
应用 到那个 Camel 上下文 中的所有日志端点。如果您需要不同的端点的不同 ExchangeFormatters,请根据需要对 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"/>