1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.testing.nio;
29
30 import java.util.Iterator;
31
32 import org.apache.hc.core5.http.Header;
33 import org.apache.hc.core5.http.HttpConnection;
34 import org.apache.hc.core5.http.HttpRequest;
35 import org.apache.hc.core5.http.HttpResponse;
36 import org.apache.hc.core5.http.impl.Http1StreamListener;
37 import org.apache.hc.core5.http.message.RequestLine;
38 import org.apache.hc.core5.http.message.StatusLine;
39 import org.apache.hc.core5.testing.classic.LoggingSupport;
40 import org.slf4j.LoggerFactory;
41 import org.slf4j.Logger;
42
43 public class LoggingHttp1StreamListener implements Http1StreamListener {
44
45 enum Type { CLIENT, SERVER }
46
47 public final static LoggingHttp1StreamListener INSTANCE_CLIENT = new LoggingHttp1StreamListener(Type.CLIENT);
48 public final static LoggingHttp1StreamListener INSTANCE_SERVER = new LoggingHttp1StreamListener(Type.SERVER);
49
50 private final Logger connLog = LoggerFactory.getLogger("org.apache.hc.core5.http.connection");
51 private final Logger headerLog = LoggerFactory.getLogger("org.apache.hc.core5.http.headers");
52 private final String requestDirection;
53 private final String responseDirection;
54
55 private LoggingHttp1StreamListener(final Type type) {
56 this.requestDirection = type == Type.CLIENT ? " >> " : " << ";
57 this.responseDirection = type == Type.CLIENT ? " << " : " >> ";
58 }
59
60 @Override
61 public void onRequestHead(final HttpConnection connection, final HttpRequest request) {
62 if (headerLog.isDebugEnabled()) {
63 final String idRequestDirection = LoggingSupport.getId(connection) + requestDirection;
64 headerLog.debug("{}{}", idRequestDirection, new RequestLine(request));
65 for (final Iterator<Header> it = request.headerIterator(); it.hasNext(); ) {
66 headerLog.debug("{}{}", idRequestDirection, it.next());
67 }
68 }
69 }
70
71 @Override
72 public void onResponseHead(final HttpConnection connection, final HttpResponse response) {
73 if (headerLog.isDebugEnabled()) {
74 final String id = LoggingSupport.getId(connection);
75 headerLog.debug("{}{}{}", id, responseDirection, new StatusLine(response));
76 for (final Iterator<Header> it = response.headerIterator(); it.hasNext(); ) {
77 headerLog.debug("{}{}{}", id, responseDirection, it.next());
78 }
79 }
80 }
81
82 @Override
83 public void onExchangeComplete(final HttpConnection connection, final boolean keepAlive) {
84 if (connLog.isDebugEnabled()) {
85 if (keepAlive) {
86 connLog.debug("{} connection is kept alive", LoggingSupport.getId(connection));
87 } else {
88 connLog.debug("{} connection is not kept alive", LoggingSupport.getId(connection));
89 }
90 }
91 }
92
93 }