现有应用程序使用Camel日志记录(bog“log()”DSL,以及日志组件。
我们希望拦截或覆盖,以便每条日志消息也会记录特定的标头值(例如x-correlation-id = ABC-123)
实现这一目标的好方法是什么?
答案 0 :(得分:2)
自版本2.19.0
以来,Apache Camel支持可插入LogListener
。这非常强大,因为在日志记录之前调用的方法onLog
具有Exchange
,CamelLogger
和消息的实例。您可以在那里自定义消息,几乎没有任何限制。
LogListener的实现:
public class MyLogListener implements LogListener {
@Override
public String onLog(Exchange exchange, CamelLogger camelLogger, String message) {
return String.format("%s: %s", exchange.getIn().getHeader(Exchange.CORRELATION_ID), message);
}
}
LogListener注册:
getContext().addLogListener(new MyLogListener());
如果您使用的是Apache Camel版本2.21.0
及更新版本,则不需要将其注册到上下文,因为它在注册表中被查找,因此将MyLogListener
注释为@Bean
就足够了。