Skip to content

Conversation

Copilot
Copy link

@Copilot Copilot AI commented Aug 5, 2025

This PR implements the logger configuration parameters specified in opentelemetry-specification#4612, adding support for minimum_severity and trace_based filtering in the Java SDK logging implementation.

Changes

Core Implementation

  • Enhanced LoggerConfig: Added minimumSeverity (int) and traceBased (boolean) parameters with AutoValue support
  • Updated SdkLogger: Modified to store and apply new configuration parameters in isEnabled() checks and configuration updates
  • Enhanced log record builders: Updated both SdkLogRecordBuilder and ExtendedSdkLogRecordBuilder to apply filtering logic in their emit() methods

Filtering Logic

  • Minimum severity filtering: Log records with severity below the configured minimum are dropped (except UNDEFINED_SEVERITY_NUMBER which passes through)
  • Trace-based filtering: When enabled, log records not associated with sampled traces are dropped (records without valid span context pass through)
  • Dual application: Filtering is applied in both isEnabled() (for optimization) and emit() (for safety) as specified

API Enhancements

  • Added convenience methods: LoggerConfig.withMinimumSeverity(int) and LoggerConfig.withTraceBased()
  • Maintained full backward compatibility with existing LoggerConfig usage
  • Preserved existing constructor signatures with overloaded versions

Example Usage

// Set minimum severity to WARN
SdkLoggerProvider.builder()
    .addLoggerConfiguratorCondition(nameEquals("com.example.*"), 
        LoggerConfig.withMinimumSeverity(Severity.WARN.getSeverityNumber()))
    .build();

// Enable trace-based filtering
SdkLoggerProvider.builder()
    .addLoggerConfiguratorCondition(nameEquals("sensitive.*"), 
        LoggerConfig.withTraceBased())
    .build();

// Combine both parameters
SdkLoggerProvider.builder()
    .addLoggerConfiguratorCondition(nameEquals("production.*"), 
        LoggerConfig.create(true, Severity.ERROR.getSeverityNumber(), true))
    .build();

Testing

  • Added comprehensive test coverage for all new filtering scenarios
  • Verified isEnabled() method behavior with new parameters
  • Ensured backward compatibility with existing configurations
  • All existing tests continue to pass without modification

This implementation follows the OpenTelemetry specification exactly, providing efficient log filtering capabilities while maintaining the existing API contract.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • dl.google.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.14.3-bin/cv11ve7ro1n3o1j4so8xd9n66/gradle-8.14.3/lib/gradle-daemon-main-8.14.3.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.14.3-bin/cv11ve7ro1n3o1j4so8xd9n66/gradle-8.14.3/lib/agents/gradle-instrumentation-agent-8.14.3.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.3 (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.14.3-bin/cv11ve7ro1n3o1j4so8xd9n66/gradle-8.14.3/lib/gradle-daemon-main-8.14.3.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.14.3-bin/cv11ve7ro1n3o1j4so8xd9n66/gradle-8.14.3/lib/agents/gradle-instrumentation-agent-8.14.3.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.3 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@Copilot Copilot AI changed the title [WIP] Implement @open-telemetry/opentelemetry-specification/pull/4612 Implement minimum_severity and trace_based logger configuration parameters Aug 5, 2025
Copilot finished work on behalf of trask August 5, 2025 19:38
@Copilot Copilot AI requested a review from trask August 5, 2025 19:38
@trask trask closed this Aug 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants