覆盖或拦截骆驼日志

Dar*_* X. 1 apache-camel

现有应用程序使用 Camel 日志记录(陷入“log()”DSL,以及 Log 组件。

我们希望拦截或覆盖,以便每条日志消息也记录出特定的 Header 值(例如 x-correlation-id=ABC-123)

实现这一目标的好的惯用方法是什么?

Bed*_*dla 5

Apache CamelLogListener2.19.0. 这是非常强大的,因为它的方法onLog,它是记录之前正确调用,有实例ExchangeCamelLogger和消息。您可以在那里几乎没有限制地自定义消息。

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

日志监听器注册:

getContext().addLogListener(new MyLogListener());
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Apache的骆驼版本2.21.0和更新,你不需要注册到上下文,因为它是在注册中心查找到,所以标注MyLogListener@Bean是足够的。