不推荐使用Apache CXF LoggingInInterceptor-改用什么?

时间:2019-03-04 19:05:06

标签: java logging cxf interceptor

我在版本3.2.7的cxf-spring-boot-starter-jaxws插件的帮助下,将Apache CXF与Spring Boot结合使用。

我的意图是自定义LoggingInterceptor,但是当我创建以下类时:

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

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

  

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

那么如何使用该模块自定义日志拦截器呢?

3 个答案:

答案 0 :(得分:3)

此消息告诉您的是使用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.LoggingInInterceptorlink


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

抓住它后,就可以

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

答案 1 :(得分:3)

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

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

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类,您在其中拥有自己的字符串操作逻辑以掩盖所需的信息。

让我知道它是否有效!

答案 2 :(得分:0)

当您在其他地方提到此依赖项时:

<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);