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

Custom Log Handler using HTTP PUT Method and creates loop

我正在开发 Java Web 服务。我们想在 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

我是否有逻辑错误或存在解决此问题的方法?

一个简单的解决方案是将记录器配置为不记录消息或对 URLConnection class 甚至它的整个包使用更高级别(例如 INFO)。有关如何使用 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 包含在您的应用程序包中。