如何禁用登录cxf
拦截器的一种方法?
我可以禁用所有输入请求或所有输出请求:
<logger name="org.apache.cxf.services.MyService.REQ_OUT" level="ERROR"/>
<logger name="org.apache.cxf.services.MyService.RESP_IN" level="ERROR"/>
但是我无法通过MyService中的一种方法禁用日志
我找到了一个与我想要的答案类似的答案:link
但这还不是很清楚。我不知道应该在哪里覆盖该方法:
@Override 受保护的字符串transform(String originalLogString){ 如果(doNotLog){ 返回null; } 返回originalLogString; }
我不知道这是否是一个可行的例子。
答案 0 :(得分:0)
我已经阅读了许多文章和网站,但没有找到答案。但是通过搜索代码,我找到了原因并找到了解决方案。我真的不知道它有多有效。
在我在问题中编写的示例中,使用了旧版本的logger(已描述)。在新版本org.apache.cxf.ext.logging.LoggingInInterceptor
中,方法transform
不存在
这是新记录器的解决方案:
import org.apache.cxf.ext.logging.LoggingInInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import java.util.List;
import java.util.TreeMap;
public class UnpLoggingInInterceptor extends LoggingInInterceptor {
private static final String GET_RESPONSE = "urn:GetResponse";
@Override
public void handleMessage(Message message) throws Fault {
TreeMap<String, List> headers = (TreeMap<String, List>) message.get("org.apache.cxf.message.Message.PROTOCOL_HEADERS");
if (headers != null) {
List value = headers.get("SOAPAction");
String soapAction = value != null ? (String) value.get(0) : "";
if (soapAction.replace("\"", "").equalsIgnoreCase(GET_RESPONSE)) {
isLoggingDisabledNow(message);
return;
}
}
super.handleMessage(message);
}
}