在我的应用程序中,我想用业务逻辑记录请求和响应。应用程序通过SOAP通信执行一些后端逻辑,这就是我想要记录的内容。
在同一个应用程序中,我必须提供数据(平均为4个请求/秒) 假设此服务名称为PlatformDataService。
如何仅为一个Web服务关闭cxf日志记录?
Enviorment:
我通过以下方式打开服务器上的登录信息:
答案 0 :(得分:1)
您可以展开LoggingInInterceptor
和LoggingOutInterceptor
。根据{{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并忽略它。