From cbae9495e6b7ac475a20a59426a400d5aa87bc3a Mon Sep 17 00:00:00 2001 From: Will Sargent Date: Wed, 4 Dec 2024 08:19:05 -0800 Subject: [PATCH] Add JUL implementation --- README.md | 6 ++++ lib/build.gradle.kts | 1 + .../tersesystems/debugjsse/AbstractDebug.java | 5 +++ .../debugjsse/DebugJSSEProvider.java | 15 ++------- .../tersesystems/debugjsse/LoggingDebug.java | 33 +++++++++++++++++++ .../debugjsse/PrintStreamDebug.java | 5 +-- .../debugjsse/SystemOutDebug.java | 3 ++ 7 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 lib/src/main/java/com/tersesystems/debugjsse/LoggingDebug.java diff --git a/README.md b/README.md index 430f350..f9a26c7 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,12 @@ Debug sysErrDebug = new PrintStreamDebug(System.err); provider.setDebug(sysErrDebug); ``` +or use java.util.logging: + +```java +provider.setDebug(new LoggingDebug(DEBUG, debugLogger)); +``` + And you can add your own logging framework by extending `AbstractDebug`: ```java diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index bab9683..16926ba 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -10,6 +10,7 @@ plugins { `java-library` `maven-publish` // https://docs.gradle.org/current/userguide/publishing_maven.html signing + id("com.diffplug.spotless") version "7.0.0.BETA4" } repositories { diff --git a/lib/src/main/java/com/tersesystems/debugjsse/AbstractDebug.java b/lib/src/main/java/com/tersesystems/debugjsse/AbstractDebug.java index 6408876..fda2388 100644 --- a/lib/src/main/java/com/tersesystems/debugjsse/AbstractDebug.java +++ b/lib/src/main/java/com/tersesystems/debugjsse/AbstractDebug.java @@ -9,6 +9,11 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +/** + * This is an abstract class that provides helpful defaults for most of the Debug interface. + * + * There's three methods you have to implement, but the key/trust manager is taken care of for you. + */ public abstract class AbstractDebug implements Debug { public abstract void enter(String message); diff --git a/lib/src/main/java/com/tersesystems/debugjsse/DebugJSSEProvider.java b/lib/src/main/java/com/tersesystems/debugjsse/DebugJSSEProvider.java index 75f21af..1e75031 100644 --- a/lib/src/main/java/com/tersesystems/debugjsse/DebugJSSEProvider.java +++ b/lib/src/main/java/com/tersesystems/debugjsse/DebugJSSEProvider.java @@ -1,31 +1,20 @@ package com.tersesystems.debugjsse; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLContextSpi; -import javax.net.ssl.TrustManagerFactory; - import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Provider; import java.security.Security; import java.util.Arrays; import java.util.Collections; -import java.util.Set; public class DebugJSSEProvider extends Provider { - private static String defaultKeyManagerAlgorithm; - private static String defaultTrustManagerAlgorithm; - public final static String NAME = "debugJSSE"; public final static Double VERSION = 1.0; public final static String INFO = "Debug JSSE"; - private static final String SSL_KEY_MANAGER_FACTORY_SECPROP = "ssl.KeyManagerFactory.algorithm"; - private static final String SSL_TRUST_MANAGER_FACTORY_SECPROP = "ssl.TrustManagerFactory.algorithm"; - private static final String KEY_MANAGER_FACTORY = "KeyManagerFactory"; - private static final String TRUST_MANAGER_FACTORY = "TrustManagerFactory"; + private static final String KEY_MANAGER_FACTORY = "KeyManagerFactory"; + private static final String TRUST_MANAGER_FACTORY = "TrustManagerFactory"; private static boolean enabled = false; diff --git a/lib/src/main/java/com/tersesystems/debugjsse/LoggingDebug.java b/lib/src/main/java/com/tersesystems/debugjsse/LoggingDebug.java new file mode 100644 index 0000000..2382de2 --- /dev/null +++ b/lib/src/main/java/com/tersesystems/debugjsse/LoggingDebug.java @@ -0,0 +1,33 @@ +package com.tersesystems.debugjsse; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * This is a class that logs to the given logger at the given log level. + */ +public class LoggingDebug extends AbstractDebug { + + private final Logger logger; + private final Level level; + + public LoggingDebug(Level level, Logger logger) { + this.level = level; + this.logger = logger; + } + + @Override + public void enter(String message) { + logger.log(level, message); + } + + @Override + public void exit(String message) { + logger.log(level, message); + } + + @Override + public void exception(String message, Exception e) { + logger.log(level, message); + } +} diff --git a/lib/src/main/java/com/tersesystems/debugjsse/PrintStreamDebug.java b/lib/src/main/java/com/tersesystems/debugjsse/PrintStreamDebug.java index 50c9f33..e8f6a33 100644 --- a/lib/src/main/java/com/tersesystems/debugjsse/PrintStreamDebug.java +++ b/lib/src/main/java/com/tersesystems/debugjsse/PrintStreamDebug.java @@ -1,9 +1,10 @@ package com.tersesystems.debugjsse; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.TrustManagerFactory; import java.io.PrintStream; +/** + * This is a class that prints to a PrintStream on debug output. + */ public class PrintStreamDebug extends AbstractDebug { private final PrintStream stream; diff --git a/lib/src/main/java/com/tersesystems/debugjsse/SystemOutDebug.java b/lib/src/main/java/com/tersesystems/debugjsse/SystemOutDebug.java index 38eee98..fa19e86 100644 --- a/lib/src/main/java/com/tersesystems/debugjsse/SystemOutDebug.java +++ b/lib/src/main/java/com/tersesystems/debugjsse/SystemOutDebug.java @@ -1,5 +1,8 @@ package com.tersesystems.debugjsse; +/** + * This class writes to System.out for debugging output. + */ public class SystemOutDebug extends PrintStreamDebug { public SystemOutDebug() { super(System.out);