自定义日志处理程序使用HTTP PUT方法并创建循环

时间:2015-06-03 08:24:12

标签: java java-ee logging ibm-cloud

我在Java Webservice上工作。我们想在Bluemix上构建自己的自定义日志服务。要使用日志服务,我创建了一个自定义日志处理程序。

日志处理程序在publish方法中构建请求,然后尝试通过http put方法将日志发送到日志服务。

url = new URL(REQUEST_URL);         
connection = (HttpsURLConnection) url.openConnection();
//Content type
connection.setRequestProperty("Content-type", "application/json");
// Request Method
connection.setRequestMethod("PUT");
// return parameter
connection.setRequestProperty("Accept", "application/json");

if (body != null) {
  String length = Integer.toString(body.length());
  connection.setRequestProperty("Content-Length", length);
  connection.setDoOutput(true);
  connection.getOutputStream().write(body.getBytes("UTF8"));
}   

但是,如果我使用FINE或FINEST级别,HTTPURLConnection也会记录并构建一个无限循环。

Jun 03, 2015 8:01:52 AM sun.net.www.protocol.http.HttpURLConnection getInputStream
FINE: sun.net.www.MessageHeader@d423078012 pairs: {null: HTTP/1.1 202 Accepted}{X-Backside-Transport: OK OK}{Connection: Keep-Alive}{Transfer-Encoding: chunked}{Access-Control-Allow-Origin: *}{Content-Language: en-US}{Content-Type: application/json}{Date: Wed, 03 Jun 2015 08:01:52 GMT}{X-Cf-Requestid: ec6a22e8-123a-4699-6cf9-6d3d80818dda}{X-Powered-By: Servlet/3.1}{X-Client-IP: 184.172.29.74}{X-Global-Transaction-ID: 460768451}

Jun 03, 2015 8:01:51 AM sun.net.www.protocol.http.HttpURLConnection plainConnect
FINEST: Proxy used: DIRECT

对于此问题,我是否存在逻辑错误或存在变通方法?

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是将记录器配置为不记录消息或使用更高级别(例如INFO)用于URLConnection类甚至整个包。有关如何使用java.util.logging执行此操作,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/logging/LogManager.html

如果您的应用程序在Bluemix中的Liberty buildpack上运行,您也可以尝试使用Liberty的server.xml来配置日志级别,请参阅http://www-01.ibm.com/support/knowledgecenter/SSD28V_8.5.5/com.ibm.websphere.wlp.core.doc/ae/rwlp_logging.html。您可以推送服务器文件夹或服务器包,以将此server.xml包含在您的应用包中。