Summary
The ChromaLogger interface provides structured logging for transport-level events. A java.util.logging bridge would give users a zero-dependency logging option that works out of the box with any JDK.
Proposal
Add a JulChromaLogger that implements ChromaLogger and delegates to a java.util.logging.Logger:
debug(event, fields) → logger.fine(event + " " + formatFields(fields))
info(event, fields) → logger.info(event + " " + formatFields(fields))
warn(event, fields) → logger.warning(event + " " + formatFields(fields))
error(event, fields, throwable) → logger.log(Level.SEVERE, event + " " + formatFields(fields), throwable)
Usage
Client client = ChromaClient.builder()
.baseUrl("http://localhost:8000")
.logger(JulChromaLogger.create()) // uses "tech.amikos.chromadb" logger name
.build();
Considerations
- Zero additional dependencies — JUL is built into the JDK
- Could serve as the default logger (instead of noop) so users get logging out of the box
- Consider whether this should be wired automatically when no logger is explicitly set
- Factory method pattern:
JulChromaLogger.create() for default, .create(String name) for custom logger name
- Guard field formatting behind level checks (
logger.isLoggable(Level.FINE)) to avoid allocation when disabled
- Java 8 compatible
References
ChromaLogger interface: src/main/java/tech/amikos/chromadb/v2/ChromaLogger.java
ChromaLoggers (noop impl): src/main/java/tech/amikos/chromadb/v2/ChromaLoggers.java
- Builder wiring:
ChromaClient.Builder.logger(ChromaLogger)
Summary
The
ChromaLoggerinterface provides structured logging for transport-level events. Ajava.util.loggingbridge would give users a zero-dependency logging option that works out of the box with any JDK.Proposal
Add a
JulChromaLoggerthat implementsChromaLoggerand delegates to ajava.util.logging.Logger:debug(event, fields)→logger.fine(event + " " + formatFields(fields))info(event, fields)→logger.info(event + " " + formatFields(fields))warn(event, fields)→logger.warning(event + " " + formatFields(fields))error(event, fields, throwable)→logger.log(Level.SEVERE, event + " " + formatFields(fields), throwable)Usage
Considerations
JulChromaLogger.create()for default,.create(String name)for custom logger namelogger.isLoggable(Level.FINE)) to avoid allocation when disabledReferences
ChromaLoggerinterface:src/main/java/tech/amikos/chromadb/v2/ChromaLogger.javaChromaLoggers(noop impl):src/main/java/tech/amikos/chromadb/v2/ChromaLoggers.javaChromaClient.Builder.logger(ChromaLogger)