gpt4 book ai didi

java - 禁用一项 Web 服务的 CXF 日志记录

转载 作者:行者123 更新时间:2023-11-30 02:37:29 24 4
gpt4 key购买 nike

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

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

如何仅关闭一项 Web 服务的 CXF 日志记录?

环境:

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

我通过以下方式打开服务器登录:

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

最佳答案

您可以扩展LoggingInInterceptorLoggingOutInterceptor。基于 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;
}

对于所有入站响应,扩展 LoggingInInterceptor 并仅重写转换方法。您可以只检查原始LogString 中的responseType 并忽略它。

关于java - 禁用一项 Web 服务的 CXF 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com