Java 用于清理MDC的CXF拦截器阶段

Java 用于清理MDC的CXF拦截器阶段,java,web-services,cxf,slf4j,logback,Java,Web Services,Cxf,Slf4j,Logback,您是否建议在哪个Apache CXF阶段挂接出站拦截器以清理SLF4J映射的诊断上下文(MDC) 我看到一些在阶段触发日志上下文清除的操作。PRE_STREAM。我的第一个想法是在最后一个阶段调用它 编辑:在部署它之后,我意识到我还需要将它连接到outFaultInterceptors。为了让它工作,我必须将阶段。设置结束更改为阶段。MARSHALL。但我不知道为什么,也不知道这是否是最好的阶段 我是Apache CXF的新手,希望确保我没有使用错误的阶段破坏某些东西 这是我的密码 import

您是否建议在哪个Apache CXF阶段挂接出站拦截器以清理SLF4J映射的诊断上下文(MDC)

我看到一些在
阶段触发日志上下文清除的操作。PRE_STREAM
。我的第一个想法是在最后一个
阶段调用它

编辑:在部署它之后,我意识到我还需要将它连接到
outFaultInterceptors
。为了让它工作,我必须将
阶段。设置结束
更改为
阶段。MARSHALL
。但我不知道为什么,也不知道这是否是最好的阶段

我是Apache CXF的新手,希望确保我没有使用错误的阶段破坏某些东西

这是我的密码

import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.slf4j.MDC;

public class MdcCleanUpInterceptor extends AbstractPhaseInterceptor<Message> {

    public MdcCleanUpInterceptor() {
        super(Phase.MARSHAL);
    }

    @Override
    public void handleMessage(Message message) {
        MDC.clear();
    }
}
import org.apache.cxf.message.message;
导入org.apache.cxf.phase.AbstractPhaseInterceptor;
导入org.apache.cxf.phase.phase;
导入org.slf4j.MDC;
公共类MdcCleanUpInterceptor扩展了AbstractPhaseInterceptor{
公共MdcCleanUpInterceptor(){
超级(阶段元帅);
}
@凌驾
公共无效handleMessage(消息消息){
MDC.clear();
}
}
还有我对春天的定义

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xmlns:cxf="http://cxf.apache.org/core"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
    <cxf:bus>
        <cxf:outInterceptors>
            <ref bean="mdcCleanUpInterceptor"/>
        </cxf:outInterceptors>
        <cxf:outFaultInterceptors>
            <ref bean="mdcCleanUpInterceptor"/>
        </cxf:outFaultInterceptors>
    </cxf:bus>

    <bean id="mdcCleanUpInterceptor" class="MdcCleanUpInterceptor"/>
</beans>


我和《马歇尔邮报》一起去了。这样,当输出经过marshall阶段时,MDC仍然处于上下文中,并且它仍然作为一个
出故障接收器

如果有人知道关于拦截器阶段的良好文档,那将不胜感激。我在
后封送处理方面遇到了一个问题,我的日志中有一个警告:
o.a.cxf.phase.PhaseInterceptorChain:跳过侦听器my.company.MDCOutputInterceptor:指定的阶段后期封送不存在。
,在我的情况下,最可用的阶段是
PRE\u协议
。但我有一种感觉:)在
POST\u LOGICAL
之后使用阶段来处理业务逻辑案例不是一个好主意。