27 |
27 |
28 import java.io.PrintStream; |
28 import java.io.PrintStream; |
29 import java.util.Objects; |
29 import java.util.Objects; |
30 import java.util.ResourceBundle; |
30 import java.util.ResourceBundle; |
31 import java.util.function.Supplier; |
31 import java.util.function.Supplier; |
32 import java.lang.System.Logger; |
|
33 |
32 |
34 /** |
33 /** |
35 * A {@code System.Logger} that forwards all messages to an underlying |
34 * A {@code System.Logger} that forwards all messages to an underlying |
36 * {@code System.Logger}, after adding some decoration. The logger also has the |
35 * {@code System.Logger}, after adding some decoration. The logger also has the |
37 * ability to additionally send the logged messages to System.err or System.out, |
36 * ability to additionally send the logged messages to System.err or System.out, |
48 class DebugLogger implements Logger { |
47 class DebugLogger implements Logger { |
49 // deliberately not in the same subtree than standard loggers. |
48 // deliberately not in the same subtree than standard loggers. |
50 final static String HTTP_NAME = "jdk.internal.httpclient.debug"; |
49 final static String HTTP_NAME = "jdk.internal.httpclient.debug"; |
51 final static String WS_NAME = "jdk.internal.httpclient.websocket.debug"; |
50 final static String WS_NAME = "jdk.internal.httpclient.websocket.debug"; |
52 final static String HPACK_NAME = "jdk.internal.httpclient.hpack.debug"; |
51 final static String HPACK_NAME = "jdk.internal.httpclient.hpack.debug"; |
53 final static Logger HTTP = System.getLogger(HTTP_NAME); |
52 final static System.Logger HTTP = System.getLogger(HTTP_NAME); |
54 final static Logger WS = System.getLogger(WS_NAME); |
53 final static System.Logger WS = System.getLogger(WS_NAME); |
55 final static Logger HPACK = System.getLogger(HPACK_NAME); |
54 final static System.Logger HPACK = System.getLogger(HPACK_NAME); |
56 final static long START_NANOS = System.nanoTime(); |
55 final static long START_NANOS = System.nanoTime(); |
57 |
56 |
58 private final Supplier<String> dbgTag; |
57 private final Supplier<String> dbgTag; |
59 private final Level errLevel; |
58 private final Level errLevel; |
60 private final Level outLevel; |
59 private final Level outLevel; |
61 private final Logger logger; |
60 private final System.Logger logger; |
62 private final boolean debugOn; |
61 private final boolean debugOn; |
63 private final boolean traceOn; |
62 private final boolean traceOn; |
64 |
63 |
65 /** |
64 /** |
66 * Create a logger for debug traces.The logger should only be used |
65 * Create a logger for debug traces.The logger should only be used |
92 * @param errLevel The level above which messages will be also printed on |
91 * @param errLevel The level above which messages will be also printed on |
93 * System.err (in addition to being forwarded to the internal logger). |
92 * System.err (in addition to being forwarded to the internal logger). |
94 * |
93 * |
95 * @return A logger for HTTP internal debug traces |
94 * @return A logger for HTTP internal debug traces |
96 */ |
95 */ |
97 private DebugLogger(Logger logger, |
96 private DebugLogger(System.Logger logger, |
98 Supplier<String> dbgTag, |
97 Supplier<String> dbgTag, |
99 Level outLevel, |
98 Level outLevel, |
100 Level errLevel) { |
99 Level errLevel) { |
101 this.dbgTag = dbgTag; |
100 this.dbgTag = dbgTag; |
102 this.errLevel = errLevel; |
101 this.errLevel = errLevel; |
119 || severity >= outLevel.getSeverity() |
118 || severity >= outLevel.getSeverity() |
120 || logger.isLoggable(level); |
119 || logger.isLoggable(level); |
121 } |
120 } |
122 |
121 |
123 @Override |
122 @Override |
|
123 public boolean isOn() { |
|
124 return debugOn; |
|
125 } |
|
126 |
|
127 @Override |
124 public boolean isLoggable(Level level) { |
128 public boolean isLoggable(Level level) { |
125 // fast path, we assume these guys never change. |
129 // fast path, we assume these guys never change. |
126 // support only static configuration. |
130 // support only static configuration. |
127 if (level == Level.DEBUG) return debugOn; |
131 if (level == Level.DEBUG) return debugOn; |
128 if (level == Level.TRACE) return traceOn; |
132 if (level == Level.TRACE) return traceOn; |