禁用一个Web服务的CXF日志记录

时间:2017-03-08 17:31:20

标签: java web-services cxf

在我的应用程序中,我想用业务逻辑记录请求和响应。应用程序通过SOAP通信执行一些后端逻辑,这就是我想要记录的内容。

在同一个应用程序中,我必须提供数据(平均为4个请求/秒) 假设此服务名称为PlatformDataService。

如何仅为一个Web服务关闭cxf日志记录?

Enviorment:

  • JDK 8
  • cxf 2.7.14
  • AS:Jboss EAP 6.4

我通过以下方式打开服务器上的登录信息:

  • 添加logger org.apache.cxf INFO
  • 和系统属性org.apache.cxf.logging.enabled = true

1 个答案:

答案 0 :(得分:1)

您可以展开LoggingInInterceptorLoggingOutInterceptor。根据{{​​1}},您可以忽略仅记录一项服务。

为所有出站请求扩展soapAction并覆盖方法LoggingOutInterceptor,如下所示。

handleMessage

现在还有一种方法需要在同一个类中覆盖。

private boolean doNotLog=false;

public void handleMessage(Message message) throws Fault {
    TreeMap<String,List> protocolHeaders =
            (TreeMap<String, List>) message.get("org.apache.cxf.message.Message.PROTOCOL_HEADERS");
    if (protocolHeaders != null) {
        List value = protocolHeaders.get("SOAPAction");
        String soapAction = value != null ? (String)value.get(0) : "";
        if (soapAction.equalIgnoreCase(YOUR_SERVICE_SOAP_ACTION)) {
            doNotLog=true;
        }
    }
    super.handleMessage(message);
}

对于所有入站响应,请扩展@Override protected String transform(String originalLogString) { if (doNotLog) { return null; } return originalLogString; } 并仅覆盖转换方法。你可以从originalLogString中检查responseType并忽略它。