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

Apache CXF LoggingInInterceptor is deprecated - what to use instead?

我正在使用 Apache CXF Spring 在 cxf-spring-boot-starter-jaxws 3.2.7 版插件的帮助下启动。

我的意图是自定义 LoggingInterceptors,但是当我创建以下内容时 class:

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

但我的 IDE 删除了 LoggingInInterceptor 抱怨它已被弃用的解释

use logging module rt/features/logging instead

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

此消息告诉您的是使用 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 (link)


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

掌握之后就可以做

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

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

首先,设置日志功能:

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

您不再需要拦截器(如果您使用过它们,请删除它们):

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

其次,创建您的 LoggingFeature:

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 class,您可以在其中使用自己的字符串操作逻辑来屏蔽所需信息。

如果有效请告诉我!

当你有这个在别处提到的依赖时:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-features-logging</artifactId>
    <version>${org.apache.cxf.version}</version>
</dependency>

并且当您使用 JaxWsProxyFactoryBean 时,您可以配置该工厂,例如像这样:

LoggingFeature loggingFeature = new LoggingFeature();
loggingFeature.setPrettyLogging(true);
loggingFeature.setVerbose(true);
loggingFeature.setLogMultipart(true);
factory.getFeatures().add(loggingFeature);

这个 class 的新导入是:

import org.apache.cxf.ext.logging.LoggingInInterceptor;
import org.apache.cxf.ext.logging.LoggingOutInterceptor;

可以在 org.apache.cxf:cxf-rt-features-logging 依赖项中找到。

code snippets请参考此问题。