diff --git a/api/pom.xml b/api/pom.xml
index 10a0e7e4..51cca542 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -44,6 +44,10 @@
io.opentelemetry
opentelemetry-sdk-metrics
+
+ io.opentelemetry
+ opentelemetry-sdk-logs
+
io.opentelemetry.instrumentation
opentelemetry-instrumentation-api
diff --git a/api/src/main/java/io/smallrye/opentelemetry/api/OpenTelemetryHandler.java b/api/src/main/java/io/smallrye/opentelemetry/api/OpenTelemetryHandler.java
new file mode 100644
index 00000000..4caef969
--- /dev/null
+++ b/api/src/main/java/io/smallrye/opentelemetry/api/OpenTelemetryHandler.java
@@ -0,0 +1,62 @@
+package io.smallrye.opentelemetry.api;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.LogRecord;
+
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.logs.Logger;
+import io.opentelemetry.api.logs.Severity;
+
+public class OpenTelemetryHandler extends Handler {
+ private final Logger logger;
+
+ public OpenTelemetryHandler(final Logger logger) {
+ this.logger = logger;
+ }
+
+ @Override
+ public void publish(final LogRecord record) {
+ logger.logRecordBuilder()
+ .setTimestamp(record.getInstant())
+ .setSeverity(toSeverity(record.getLevel()))
+ .setSeverityText(record.getLevel().getName())
+ .setBody(record.getMessage())
+ .emit();
+ }
+
+ @Override
+ public void flush() {
+
+ }
+
+ @Override
+ public void close() throws SecurityException {
+
+ }
+
+ private static Severity toSeverity(final Level level) {
+ if (Level.SEVERE.equals(level)) {
+ return Severity.ERROR;
+ }
+ if (Level.WARNING.equals(level)) {
+ return Severity.WARN;
+ }
+ if (Level.INFO.equals(level) || Level.CONFIG.equals(level)) {
+ return Severity.INFO;
+ }
+ if (Level.FINE.equals(level)) {
+ return Severity.DEBUG;
+ }
+ if (Level.FINER.equals(level) || Level.FINEST.equals(level) || Level.ALL.equals(level)) {
+ return Severity.TRACE;
+ }
+ return Severity.UNDEFINED_SEVERITY_NUMBER;
+ }
+
+ public static void install(final OpenTelemetry openTelemetry) {
+ Logger logger = openTelemetry.getLogsBridge().loggerBuilder(OpenTelemetryConfig.INSTRUMENTATION_NAME).build();
+ LogManager.getLogManager().getLogger("").addHandler(new OpenTelemetryHandler(logger));
+ }
+}
diff --git a/implementation/cdi/src/main/java/io/smallrye/opentelemetry/implementation/cdi/OpenTelemetryProducer.java b/implementation/cdi/src/main/java/io/smallrye/opentelemetry/implementation/cdi/OpenTelemetryProducer.java
index e59832dc..28e8ac37 100644
--- a/implementation/cdi/src/main/java/io/smallrye/opentelemetry/implementation/cdi/OpenTelemetryProducer.java
+++ b/implementation/cdi/src/main/java/io/smallrye/opentelemetry/implementation/cdi/OpenTelemetryProducer.java
@@ -34,6 +34,7 @@
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.smallrye.opentelemetry.api.OpenTelemetryBuilderGetter;
import io.smallrye.opentelemetry.api.OpenTelemetryConfig;
+import io.smallrye.opentelemetry.api.OpenTelemetryHandler;
@Singleton
public class OpenTelemetryProducer {
@@ -53,6 +54,8 @@ public OpenTelemetry getOpenTelemetry(final OpenTelemetryConfig config) {
closeables.addAll(Threads.registerObservers(openTelemetry));
closeables.addAll(GarbageCollector.registerObservers(openTelemetry));
+ OpenTelemetryHandler.install(openTelemetry);
+
return openTelemetry;
}
diff --git a/implementation/cdi/src/main/resources/META-INF/microprofile-config.properties b/implementation/cdi/src/main/resources/META-INF/microprofile-config.properties
deleted file mode 100644
index 97152c37..00000000
--- a/implementation/cdi/src/main/resources/META-INF/microprofile-config.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-otel.logs.exporter=none
-otel.metric.export.interval=1000
\ No newline at end of file
diff --git a/test/src/main/resources/META-INF/microprofile-config.properties b/test/src/main/resources/META-INF/microprofile-config.properties
index f1bf4a03..71890426 100644
--- a/test/src/main/resources/META-INF/microprofile-config.properties
+++ b/test/src/main/resources/META-INF/microprofile-config.properties
@@ -1,4 +1,5 @@
otel.traces.exporter=in-memory
otel.metrics.exporter=in-memory
+otel.logs.exporter=none
otel.bsp.schedule.delay=100
otel.metric.export.interval=100