您是否建议Apache CXF阶段挂钩出站拦截器以清理SLF4J映射诊断上下文(MDC)?
我看到一些code available publicly on GitHub触发了Phase.PRE_STREAM
的日志记录上下文清除。我的第一个想法就是在最后Phase.SETUP_ENDING
调用它。
编辑:部署后,我意识到我还需要将其连接到outFaultInterceptors
。要实现这一点,我必须将Phase.SETUP_ENDING
更改为Phase.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();
}
}
和我的Spring定义
<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>
答案 0 :(得分:2)
我和POST_MARSHALL
一起去了。这样,当输出经过马歇尔阶段时,MDC仍处于上下文中,并且它仍然可以作为outFaultInterceptor
。