On Tue, 27 Jan 2026 11:44:06 GMT, Sean Coffey <[email protected]> wrote:
>> The `javax.net.debug` TLS debug option is buggy since TLSv1.3 implementation
>> was introduced many years ago.
>>
>> Where "ssl" was previously a value to obtain all TLS debug traces (except
>> network type dumps, verbose data), it now prints only a few lines for a
>> standard client TLS connection.
>>
>> The property parsing was also lax and allowed users to declare verbose
>> logging options by themselves where the documentation stated that such
>> verbose options were only meant to be used in conjunction with other TLS
>> options :
>>
>>
>> System.err.println("help print the help messages");
>> System.err.println("expand expand debugging information");
>> System.err.println();
>> System.err.println("all turn on all debugging");
>> System.err.println("ssl turn on ssl debugging");
>> System.err.println();
>> System.err.println("The following can be used with ssl:");
>> System.err.println("\trecord enable per-record tracing");
>> System.err.println("\thandshake print each handshake message");
>> System.err.println("\tkeygen print key generation data");
>> System.err.println("\tsession print session activity");
>> System.err.println("\tdefaultctx print default SSL
>> initialization");
>> System.err.println("\tsslctx print SSLContext tracing");
>> System.err.println("\tsessioncache print session cache tracing");
>> System.err.println("\tkeymanager print key manager tracing");
>> System.err.println("\ttrustmanager print trust manager tracing");
>> System.err.println("\tpluggability print pluggability tracing");
>> System.err.println();
>> System.err.println("\thandshake debugging can be widened with:");
>> System.err.println("\tdata hex dump of each handshake
>> message");
>> System.err.println("\tverbose verbose handshake message
>> printing");
>> System.err.println();
>> System.err.println("\trecord debugging can be widened with:");
>> System.err.println("\tplaintext hex dump of record plaintext");
>> System.err.println("\tpacket print raw SSL/TLS packets");
>>
>>
>> as part of this patch, I've also moved the log call to the more performant
>> friendly
>> `System.Logger#log(java.lang.System.Logger.Level,java.util.function.Supplier)`
>> method.
>>
>> the output has changed slightly with respect to that - less verbose
>>
>> e.g. old...
>
> Sean Coffey has updated the pull request with a new target base due to a
> merge or a rebase. The pull request now contains 48 commits:
>
> - correct NamedGroup.java merge
> - Merge branch 'master' into 8044609-ssl
> - fix up test bug ID
> - fix up files post merge
> - Merge branch 'master' into 8044609-ssl
> - prep for isOn() merge
> - Merge branch 'master' into 8044609-ssl
> - Merge branch 'master' into 8044609-ssl
> - Merge branch 'master' into 8044609-ssl
> - Incorporate review comments from Brad
> - ... and 38 more: https://git.openjdk.org/jdk/compare/c69275dd...6b5c692c
Nothing major. We did most of the heavy lifting last year. Without looking at
the calls sites yet, I like how the enum turned out. I am looking forward to
seeing how the enums actually fit.
Just a few nits+requested comments.
I've hit the `SSLLogger.java` code pretty hard, now off to the other 500+ call
sites. ;)
I'm going to check the Levels and the categories and see if we can make them
more consistent, with ears towards:
[JDK-8338702](https://bugs.openjdk.org/browse/JDK-8338702)
[JDK-8344158](https://bugs.openjdk.org/browse/JDK-8344158)
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 52:
> 50: /**
> 51: * Implementation of SSL logger.
> 52: *
If you feel up to it, you could add `<p>` where needed.
Also, lines 298, 302, and 308.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 58:
> 56: * and applications can customize and configure the logger or use external
> 57: * logging mechanisms. If the system property "javax.net.debug" is
> defined
> 58: * and non-empty, a private debug logger implemented in this class is
> used.
add something like...
the private debug logger in this class simply outputs to `System.err`.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 62:
> 60: public final class SSLLogger implements System.Logger {
> 61: private static final System.Logger logger;
> 62: // high level boolean to track whether "all" or "ssl" option
Minor nit:
This makes it sounds like the boolean state `true` might be `all` and `false`
is `ssl`.
Suggest maybe "to track whether logging is active (i.e. all/ssl)."
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 105:
> 103: if (Opt.HANDSHAKE.on && p.contains("verbose")) {
> 104: Opt.HANDSHAKE_VERBOSE.on = true;
> 105: }
Not absolutely needed given the options currently defined, but you could
`replaceFirst()` on these 3 as well.
Your call.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 130:
> 128: }
> 129: }
> 130: // javax.net.debug would be misconfigured property with
> respect
Nit: add extra line.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 149:
> 147: return logging;
> 148: }
> 149: /**
Nit: add a line.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 157:
> 155: }
> 156:
> 157: public static void severe(String msg, Object... params) {
Since we're down here, these don't really need to be `public`. Package-private
is fine.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 237:
> 235: System.err.printf("%nAdding valid filter options to \"ssl\" will
> log" +
> 236: " messages to include%njust those filtered
> categories.%n");
> 237: System.err.printf("%nIf \"ssl\" is specified by itself," +
Maybe reverse 235 and 237. ssl by itself, then ssl+filter? I've gone
back/forth on this quite a bit. Do you have a preference?
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 296:
> 294: return level != Level.OFF;
> 295: }
> 296: /**
Nit: add a line.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 311:
> 309: * Enabling subcomponents fine-tunes (filters) debug output.
> 310: */
> 311: public enum Opt {
Does this need to be public?
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 465:
> 463: formatParameters(parameters) :
> 464: Utilities.indent(formatParameters(parameters)))
> 465: };
Why did the indent get changed?
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 490:
> 488: isFirst = false;
> 489: } else {
> 490: builder.append(",\n");
Why did this get changed from `LINE_SEP` to `\n`. All of the other line
separators in this file are still `LINE_SEP`.
src/java.base/share/classes/sun/security/ssl/SSLLogger.java line 494:
> 492:
> 493: if (parameter instanceof Throwable) {
> 494:
> builder.append(formatThrowable((Throwable)parameter));
Nit: from the Java Coding conventions, Section 8.2:
Casts should be followed by a blank. Examples:
myMethod((byte) aNum, (Object) x);
myFunc((int) (cp + 5), ((int) (i + 3))
I don't have a strong preference here.
If you do revert back, there are several places that got changed here.
-------------
PR Review: https://git.openjdk.org/jdk/pull/18764#pullrequestreview-3713815602
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734229865
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734137947
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734242861
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734786277
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734786894
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734896804
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734793448
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734912268
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734915243
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734920494
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734926518
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734982921
PR Review Comment: https://git.openjdk.org/jdk/pull/18764#discussion_r2734985908