Apache CXF LoggingInInterceptor 已被弃用 - 使用什么来代替?

2022-09-03 16:55:13

我在3.2.7版插件的帮助下使用带有Spring Boot的Apache CXF。cxf-spring-boot-starter-jaxws

我的目的是自定义LogingInterceptors,但是当我创建以下类时:

public class CustomLoggingInInterceptor extends org.apache.cxf.interceptor.LoggingInInterceptor {}

但是我的IDE删除了LogingInInterceptor,抱怨它被弃用了解释

改用日志记录模块 rt/features/logging

那么应该如何使用此模块自定义日志记录拦截器?


答案 1

此消息告诉您的是使用该模块。Apache CXF Advanced logging feature

它的依赖关系是(最新版本)

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-features-logging</artifactId>
    <version>3.3.0</version>
    <scope>test</scope>
</dependency>

在里面你会发现一个可比的(链接org.apache.cxf.ext.logging.LoggingInInterceptor)


我不是 CXF 用户,但我认为您必须与 .
请记住,您需要对所有 CXF 模块使用相同的版本。JaxWsProxyFactoryBean

掌握它之后,您可以做

factory.getInInterceptors().add(new MyCustomInterceptor());

答案 2

基本上需要4件事才能从旧的cxf日志记录更新到新的cxf日志记录(rt/features/logging)。

首先,设置日志记录功能:

final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setFeatures(Collections.singletonList(new CustomLoggingFeature()));

您不再需要拦截器(如果您使用了拦截器,请将其删除):

factory.getInInterceptors().add(new CustomMaskedLoggingInInterceptor());factory.getOutInterceptors().add(new CustomMaskedLoggingOutInterceptor());

其次,创建您的日志记录功能:

public class CustomLoggingFeature extends org.apache.cxf.ext.logging.LoggingFeature {
    public CustomLoggingFeature() {
        super();
        this.setSender(new CustomEventLogSender());
    }
}

第三,创建你的 EventLogSender:

public class CustomEventLogSender extends Slf4jVerboseEventSender {
    @Override
    protected String getLogMessage(LogEvent event) {
        String logMessage = super.getLogMessage(event);
        return CustomMasker.mask(logMessage);
    }
}

第四,创建一个 CustomMasker 类,在该类中,您有自己的字符串操作逻辑来屏蔽所需的信息。

让我知道它是否有效!


推荐