在网络服务上禁用一种方法的CXF日志记录

时间:2018-10-17 13:03:57

标签: logging cxf logback

如何禁用登录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;       }

我不知道这是否是一个可行的例子。

1 个答案:

答案 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);
    }
}