You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2011/05/29 11:55:29 UTC

svn commit: r1128849 - in /httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio: client/NHttpClientProtocolHandler.java conn/DefaultClientConnection.java conn/LoggingIOSession.java conn/Wire.java

Author: olegk
Date: Sun May 29 09:55:28 2011
New Revision: 1128849

URL: http://svn.apache.org/viewvc?rev=1128849&view=rev
Log:
Improved logging: add connection ID to connection event logs

Modified:
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/DefaultClientConnection.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java?rev=1128849&r1=1128848&r2=1128849&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpClientProtocolHandler.java Sun May 29 09:55:28 2011
@@ -33,7 +33,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.HttpException;
-import org.apache.http.HttpInetConnection;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
@@ -89,7 +88,7 @@ class NHttpClientProtocolHandler impleme
         HttpExchange httpexchange = new HttpExchange();
         HttpContext context = conn.getContext();
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Connected " + formatState(conn, httpexchange));
+            this.log.debug(conn + ": Connected");
         }
         context.setAttribute(HTTP_EXCHNAGE, httpexchange);
         requestReady(conn);
@@ -97,10 +96,9 @@ class NHttpClientProtocolHandler impleme
 
     public void closed(final NHttpClientConnection conn) {
         HttpContext context = conn.getContext();
-        HttpExchange httpexchange = getHttpExchange(context);
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Disconnected " + formatState(conn, httpexchange));
+            this.log.debug(conn + ": Disconnected");
         }
         if (handler != null) {
             handler.cancel();
@@ -110,7 +108,9 @@ class NHttpClientProtocolHandler impleme
     public void exception(final NHttpClientConnection conn, final HttpException ex) {
         HttpContext context = conn.getContext();
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
-        this.log.error("HTTP protocol exception: " + ex.getMessage(), ex);
+        if (this.log.isErrorEnabled()) {
+            this.log.error(conn + " HTTP protocol exception: " + ex.getMessage(), ex);
+        }
         if (handler != null) {
             handler.failed(ex);
         }
@@ -120,7 +120,9 @@ class NHttpClientProtocolHandler impleme
     public void exception(final NHttpClientConnection conn, final IOException ex) {
         HttpContext context = conn.getContext();
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
-        this.log.error("I/O error: " + ex.getMessage(), ex);
+        if (this.log.isErrorEnabled()) {
+            this.log.error(conn + " I/O error: " + ex.getMessage(), ex);
+        }
         if (handler != null) {
             handler.failed(ex);
         }
@@ -132,14 +134,14 @@ class NHttpClientProtocolHandler impleme
         HttpExchange httpexchange = getHttpExchange(context);
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Request ready " + formatState(conn, httpexchange));
+            this.log.debug(conn + " Request ready");
         }
         if (httpexchange.getRequestState() != MessageState.READY) {
             return;
         }
         if (handler == null || handler.isDone()) {
             if (this.log.isDebugEnabled()) {
-                this.log.debug("No request submitted " + formatState(conn, httpexchange));
+                this.log.debug(conn + " No request submitted");
             }
             return;
         }
@@ -170,13 +172,13 @@ class NHttpClientProtocolHandler impleme
             }
         } catch (IOException ex) {
             if (this.log.isDebugEnabled()) {
-                this.log.debug("I/O error: " + ex.getMessage(), ex);
+                this.log.debug(conn + " I/O error: " + ex.getMessage(), ex);
             }
             shutdownConnection(conn);
             handler.failed(ex);
         } catch (HttpException ex) {
             if (this.log.isDebugEnabled()) {
-                this.log.debug("HTTP protocol exception: " + ex.getMessage(), ex);
+                this.log.debug(conn + " HTTP protocol exception: " + ex.getMessage(), ex);
             }
             closeConnection(conn);
             handler.failed(ex);
@@ -188,7 +190,7 @@ class NHttpClientProtocolHandler impleme
         HttpExchange httpexchange = getHttpExchange(context);
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Input ready " + formatState(conn, httpexchange));
+            this.log.debug(conn + " Input ready");
         }
         try {
             handler.consumeContent(decoder, conn);
@@ -209,7 +211,7 @@ class NHttpClientProtocolHandler impleme
         HttpExchange httpexchange = getHttpExchange(context);
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Output ready " + formatState(conn, httpexchange));
+            this.log.debug(conn + " Output ready");
         }
         try {
             if (httpexchange.getRequestState() == MessageState.ACK) {
@@ -222,7 +224,7 @@ class NHttpClientProtocolHandler impleme
             }
         } catch (IOException ex) {
             if (this.log.isDebugEnabled()) {
-                this.log.debug("I/O error: " + ex.getMessage(), ex);
+                this.log.debug(conn + " I/O error: " + ex.getMessage(), ex);
             }
             shutdownConnection(conn);
             handler.failed(ex);
@@ -234,7 +236,7 @@ class NHttpClientProtocolHandler impleme
         HttpExchange httpexchange = getHttpExchange(context);
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Response received " + formatState(conn, httpexchange));
+            this.log.debug(conn + " Response received");
         }
         try {
             HttpResponse response = conn.getHttpResponse();
@@ -292,7 +294,7 @@ class NHttpClientProtocolHandler impleme
         HttpExchange httpexchange = getHttpExchange(context);
         HttpAsyncExchangeHandler<?> handler = getHandler(context);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Timeout " + formatState(conn, httpexchange));
+            this.log.debug(conn + " Timeout");
         }
         try {
             if (httpexchange.getRequestState() == MessageState.ACK) {
@@ -352,7 +354,7 @@ class NHttpClientProtocolHandler impleme
             }
         }
         if (this.log.isDebugEnabled()) {
-            this.log.debug("Response processed " + formatState(conn, httpexchange));
+            this.log.debug(conn + " Response processed");
         }
         handler.responseCompleted();
         httpexchange.reset();
@@ -375,35 +377,4 @@ class NHttpClientProtocolHandler impleme
             && status != HttpStatus.SC_RESET_CONTENT;
     }
 
-    private String formatState(final NHttpConnection conn, final HttpExchange httpexchange) {
-        StringBuilder buf = new StringBuilder();
-        buf.append("[");
-        if (conn.isOpen() && (conn instanceof HttpInetConnection)) {
-            HttpInetConnection inetconn = (HttpInetConnection) conn;
-            buf.append(inetconn.getRemoteAddress());
-            buf.append(":");
-            buf.append(inetconn.getRemotePort());
-        }
-        buf.append("(");
-        buf.append(conn.isOpen() ? "open" : "closed");
-        buf.append("),request=");
-        buf.append(httpexchange.getRequestState());
-        if (httpexchange.getRequest() != null) {
-            buf.append("(");
-            buf.append(httpexchange.getRequest().getRequestLine());
-            buf.append(")");
-        }
-        buf.append(",response=");
-        buf.append(httpexchange.getResponseState());
-        if (httpexchange.getResponse() != null) {
-            buf.append("(");
-            buf.append(httpexchange.getResponse().getStatusLine());
-            buf.append(")");
-        }
-        buf.append(",valid=");
-        buf.append(httpexchange.isValid());
-        buf.append("]");
-        return buf.toString();
-    }
-
 }

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/DefaultClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/DefaultClientConnection.java?rev=1128849&r1=1128848&r2=1128849&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/DefaultClientConnection.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/DefaultClientConnection.java Sun May 29 09:55:28 2011
@@ -28,6 +28,7 @@ package org.apache.http.impl.nio.conn;
 
 import java.io.IOException;
 import java.nio.channels.ReadableByteChannel;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -54,6 +55,9 @@ public class DefaultClientConnection
     private final Log wirelog   = LogFactory.getLog("org.apache.http.wire");
     private final Log log;
 
+    private static final AtomicLong COUNT = new AtomicLong();
+
+    private String id;
     private SSLIOSession ssliosession;
 
     public DefaultClientConnection(
@@ -62,9 +66,10 @@ public class DefaultClientConnection
             final ByteBufferAllocator allocator,
             final HttpParams params) {
         super(iosession, responseFactory, allocator, params);
+        this.id = "http-outgoing-" + COUNT.incrementAndGet();
         this.log = LogFactory.getLog(iosession.getClass());
         if (this.log.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
-            this.session = new LoggingIOSession(iosession, this.log, this.wirelog, "http-outgoing");
+            this.session = new LoggingIOSession(iosession, this.id, this.log, this.wirelog);
         }
         if (iosession instanceof SSLIOSession) {
             this.ssliosession = (SSLIOSession) iosession;
@@ -76,8 +81,8 @@ public class DefaultClientConnection
     public void upgrade(final IOSession iosession) {
         this.session.setBufferStatus(null);
         if (this.log.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
-            this.session = new LoggingIOSession(iosession, this.headerlog, this.wirelog,
-                    iosession instanceof SSLIOSession ? "https-outgoing" : "http-outgoing");
+            this.log.debug(this.id + " Upgrade session " + iosession);
+            this.session = new LoggingIOSession(iosession, this.id, this.headerlog, this.wirelog);
         } else {
             this.session = iosession;
         }
@@ -110,6 +115,11 @@ public class DefaultClientConnection
                 super.createResponseParser(buffer, responseFactory, params));
     }
 
+    @Override
+    public String toString() {
+        return this.id;
+    }
+
     class LoggingNHttpMessageWriter implements NHttpMessageWriter<HttpRequest> {
 
         private final NHttpMessageWriter<HttpRequest> writer;
@@ -125,10 +135,10 @@ public class DefaultClientConnection
 
         public void write(final HttpRequest request) throws IOException, HttpException {
             if (request != null && headerlog.isDebugEnabled()) {
-                headerlog.debug(">> " + request.getRequestLine().toString());
+                headerlog.debug(id + " >> " + request.getRequestLine().toString());
                 Header[] headers = request.getAllHeaders();
                 for (int i = 0; i < headers.length; i++) {
-                    headerlog.debug(">> " + headers[i].toString());
+                    headerlog.debug(id + " >> " + headers[i].toString());
                 }
             }
             this.writer.write(request);
@@ -157,10 +167,10 @@ public class DefaultClientConnection
             HttpResponse response = this.parser.parse();
             if (headerlog.isDebugEnabled()) {
                 if (response != null && headerlog.isDebugEnabled()) {
-                    headerlog.debug("<< " + response.getStatusLine().toString());
+                    headerlog.debug(id + " << " + response.getStatusLine().toString());
                     Header[] headers = response.getAllHeaders();
                     for (int i = 0; i < headers.length; i++) {
-                        headerlog.debug("<< " + headers[i].toString());
+                        headerlog.debug(id + " << " + headers[i].toString());
                     }
                 }
             }

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java?rev=1128849&r1=1128848&r2=1128849&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java Sun May 29 09:55:28 2011
@@ -32,7 +32,6 @@ import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.channels.ByteChannel;
 import java.nio.channels.SelectionKey;
-import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.commons.logging.Log;
 import org.apache.http.nio.reactor.IOSession;
@@ -40,24 +39,22 @@ import org.apache.http.nio.reactor.Sessi
 
 public class LoggingIOSession implements IOSession {
 
-    private static AtomicLong COUNT = new AtomicLong(0);
-
-    private final Log log;
-    private final Wire wirelog;
     private final IOSession session;
     private final ByteChannel channel;
     private final String id;
+    private final Log log;
+    private final Wire wirelog;
 
-    public LoggingIOSession(final IOSession session, final Log log, final Log wirelog, final String id) {
+    public LoggingIOSession(final IOSession session, final String id, final Log log, final Log wirelog) {
         super();
         if (session == null) {
             throw new IllegalArgumentException("I/O session may not be null");
         }
-        this.log = log;
-        this.wirelog = new Wire(wirelog);
         this.session = session;
         this.channel = new LoggingByteChannel();
-        this.id = id + "-" + COUNT.incrementAndGet();
+        this.id = id;
+        this.log = log;
+        this.wirelog = new Wire(wirelog, this.id);
     }
 
     public ByteChannel channel() {
@@ -77,7 +74,7 @@ public class LoggingIOSession implements
     }
 
     private static String formatOps(int ops) {
-        StringBuffer buffer = new StringBuffer(6);
+        StringBuilder buffer = new StringBuilder(6);
         buffer.append('[');
         if ((ops & SelectionKey.OP_READ) > 0) {
             buffer.append('r');
@@ -96,32 +93,29 @@ public class LoggingIOSession implements
     }
 
     public void setEventMask(int ops) {
+        this.session.setEventMask(ops);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Set event mask "
-                    + formatOps(ops));
+            this.log.debug(this.id + " " + this.session + ": Event mask set " + formatOps(ops));
         }
-        this.session.setEventMask(ops);
     }
 
     public void setEvent(int op) {
+        this.session.setEvent(op);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Set event "
-                    + formatOps(op));
+            this.log.debug(this.id + " " + this.session + ": Event set " + formatOps(op));
         }
-        this.session.setEvent(op);
     }
 
     public void clearEvent(int op) {
+        this.session.clearEvent(op);
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Clear event "
-                    + formatOps(op));
+            this.log.debug(this.id + " " + this.session + ": Event cleared " + formatOps(op));
         }
-        this.session.clearEvent(op);
     }
 
     public void close() {
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Close");
+            this.log.debug(this.id + " " + this.session + ": Close");
         }
         this.session.close();
     }
@@ -136,7 +130,7 @@ public class LoggingIOSession implements
 
     public void shutdown() {
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Shutdown");
+            this.log.debug(this.id + " " + this.session + ": Shutdown");
         }
         this.session.shutdown();
     }
@@ -147,8 +141,7 @@ public class LoggingIOSession implements
 
     public void setSocketTimeout(int timeout) {
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Set timeout "
-                    + timeout);
+            this.log.debug(this.id + " " + this.session + ": Set timeout " + timeout);
         }
         this.session.setSocketTimeout(timeout);
     }
@@ -171,26 +164,29 @@ public class LoggingIOSession implements
 
     public void setAttribute(final String name, final Object obj) {
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Set attribute "
-                    + name);
+            this.log.debug(this.id + " " + this.session + ": Set attribute " + name);
         }
         this.session.setAttribute(name, obj);
     }
 
     public Object removeAttribute(final String name) {
         if (this.log.isDebugEnabled()) {
-            this.log.debug("I/O session " + this.id + " " + this.session + ": Remove attribute "
-                    + name);
+            this.log.debug(this.id + " " + this.session + ": Remove attribute " + name);
         }
         return this.session.removeAttribute(name);
     }
 
+    @Override
+    public String toString() {
+        return this.id + " " + this.session.toString();
+    }
+
     class LoggingByteChannel implements ByteChannel {
 
         public int read(final ByteBuffer dst) throws IOException {
             int bytesRead = session.channel().read(dst);
             if (log.isDebugEnabled()) {
-                log.debug("I/O session " + id + " " + session + ": " + bytesRead + " bytes read");
+                log.debug(id + " " + session + ": " + bytesRead + " bytes read");
             }
             if (bytesRead > 0 && wirelog.isEnabled()) {
                 ByteBuffer b = dst.duplicate();
@@ -205,7 +201,7 @@ public class LoggingIOSession implements
         public int write(final ByteBuffer src) throws IOException {
             int byteWritten = session.channel().write(src);
             if (log.isDebugEnabled()) {
-                log.debug("I/O session " + id + " " + session + ": " + byteWritten + " bytes written");
+                log.debug(id + " " + session + ": " + byteWritten + " bytes written");
             }
             if (byteWritten > 0 && wirelog.isEnabled()) {
                 ByteBuffer b = src.duplicate();
@@ -219,7 +215,7 @@ public class LoggingIOSession implements
 
         public void close() throws IOException {
             if (log.isDebugEnabled()) {
-                log.debug("I/O session " + id + " " + session + ": Channel close");
+                log.debug(id + " " + session + ": Channel close");
             }
             session.channel().close();
         }

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java?rev=1128849&r1=1128848&r2=1128849&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java Sun May 29 09:55:28 2011
@@ -33,10 +33,12 @@ import org.apache.commons.logging.Log;
 public class Wire {
 
     private final Log log;
+    private final String id;
 
-    public Wire(final Log log) {
+    public Wire(final Log log, final String id) {
         super();
         this.log = log;
+        this.id = id;
     }
 
     private void wire(final String header, final byte[] b, int pos, int off) {
@@ -49,7 +51,7 @@ public class Wire {
                     buffer.append("[\\n]\"");
                     buffer.insert(0, "\"");
                     buffer.insert(0, header);
-                    this.log.debug(buffer.toString());
+                    this.log.debug(this.id + " " + buffer.toString());
                     buffer.setLength(0);
             } else if ((ch < 32) || (ch > 127)) {
                 buffer.append("[0x");
@@ -63,7 +65,7 @@ public class Wire {
             buffer.append('\"');
             buffer.insert(0, '\"');
             buffer.insert(0, header);
-            this.log.debug(buffer.toString());
+            this.log.debug(this.id + " " + buffer.toString());
         }
     }