覆盖或拦截 Camel 日志记录

问题描述 投票:0回答:2

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

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

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

apache-camel
2个回答
5
投票

Apache Camel 从 LogListener

 版本开始支持可插拔 
2.19.0
。这是非常强大的,因为它的方法 
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
就足够了。


0
投票

用@Bean注释到底是什么意思?你能写出示例代码吗?

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.