Class OtelJulHandler

java.lang.Object
java.util.logging.Handler
io.jenkins.plugins.opentelemetry.init.OtelJulHandler
All Implemented Interfaces:
ExtensionPoint, io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener, Comparable<io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener>

@Extension(dynamicLoadable=YES, optional=true, ordinal=2.147483637E9) public class OtelJulHandler extends Handler implements io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener
Inspired by https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/v1.14.0/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java
  • Field Details

    • openTelemetry

      @Inject protected io.jenkins.plugins.opentelemetry.api.ReconfigurableOpenTelemetry openTelemetry
  • Constructor Details

    • OtelJulHandler

      public OtelJulHandler()
  • Method Details

    • publish

      public void publish(LogRecord logRecord)
      Map the LogRecord data model onto the LogRecordBuilder. Unmapped fields include:
      Specified by:
      publish in class Handler
    • flush

      public void flush()
      Specified by:
      flush in class Handler
    • close

      public void close() throws SecurityException
      Specified by:
      close in class Handler
      Throws:
      SecurityException
    • postConstruct

      @PostConstruct public void postConstruct()
    • preDestroy

      @Terminator @PreDestroy public void preDestroy()
      Unregister the java.util.logging handler. As @PreDestroy doesn't seem to be honored by Jenkins, we use @Terminator in addition.
    • ordinal

      public int ordinal()
      Hooking Otel logs is the first thing to initialize
      Specified by:
      ordinal in interface io.jenkins.plugins.opentelemetry.api.OpenTelemetryLifecycleListener