Skip to content

Commit 4b461f4

Browse files
committed
feat(javaagent-log-appender): switch to javaagent
1 parent 206df2b commit 4b461f4

File tree

3 files changed

+23
-48
lines changed

3 files changed

+23
-48
lines changed

log-appender/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ docker-compose up
3737
In a separate shell, run the application
3838

3939
```shell
40+
export \
41+
OTEL_SERVICE_NAME=log4j-example \
42+
OTEL_EXPORTER_OTLP_PROTOCOL=grpc \
43+
OTEL_METRICS_EXPORTER=none \
44+
OTEL_TRACES_EXPORTER=none \
45+
OTEL_LOGS_EXPORTER=otlp
46+
4047
../gradlew run
4148
```
4249

log-appender/build.gradle.kts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ plugins {
33
id("application")
44
}
55

6-
description = "OpenTelemetry Log Appender Example"
7-
val moduleName by extra { "io.opentelemetry.examples.log-appender" }
6+
description = "OpenTelemetry Log Appender Example using JavaAgent"
7+
val moduleName by extra { "io.opentelemetry.examples.javaagent-log-appender" }
88

99
java {
1010
toolchain {
@@ -13,6 +13,8 @@ java {
1313
}
1414
}
1515

16+
val agent = configurations.create("agent")
17+
1618
dependencies {
1719
// Slf4J / logback
1820
implementation("org.slf4j:slf4j-api:2.0.16")
@@ -28,15 +30,24 @@ dependencies {
2830
implementation("org.apache.logging.log4j:log4j-core")
2931

3032
// OpenTelemetry core
31-
implementation("io.opentelemetry:opentelemetry-sdk")
32-
implementation("io.opentelemetry:opentelemetry-exporter-otlp")
33+
implementation("io.opentelemetry:opentelemetry-api")
3334
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
3435

3536
// OpenTelemetry log4j / logback appenders
3637
implementation("io.opentelemetry.instrumentation:opentelemetry-log4j-appender-2.17")
3738
implementation("io.opentelemetry.instrumentation:opentelemetry-logback-appender-1.0")
39+
40+
// OpenTelemetry JavaAgent
41+
agent("io.opentelemetry.javaagent:opentelemetry-javaagent:2.8.0")
3842
}
3943

4044
application {
4145
mainClass = "io.opentelemetry.example.logappender.Application"
4246
}
47+
48+
49+
tasks.named<JavaExec>("run") {
50+
doFirst {
51+
jvmArgs("-javaagent:${agent.singleFile}")
52+
}
53+
}

log-appender/src/main/java/io/opentelemetry/example/logappender/Application.java

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
11
package io.opentelemetry.example.logappender;
22

33
import io.opentelemetry.api.GlobalOpenTelemetry;
4-
import io.opentelemetry.api.OpenTelemetry;
54
import io.opentelemetry.api.common.AttributeKey;
65
import io.opentelemetry.api.logs.Severity;
76
import io.opentelemetry.api.trace.Span;
87
import io.opentelemetry.context.Scope;
9-
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
10-
import io.opentelemetry.sdk.OpenTelemetrySdk;
11-
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
12-
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
13-
import io.opentelemetry.sdk.resources.Resource;
14-
import io.opentelemetry.sdk.trace.SdkTracerProvider;
15-
import io.opentelemetry.sdk.trace.samplers.Sampler;
16-
import io.opentelemetry.semconv.ResourceAttributes;
178
import java.util.HashMap;
189
import java.util.Map;
1910
import java.util.logging.Level;
@@ -32,15 +23,6 @@ public class Application {
3223
private static final java.util.logging.Logger julLogger = Logger.getLogger("jul-logger");
3324

3425
public static void main(String[] args) {
35-
// Initialize OpenTelemetry as early as possible
36-
OpenTelemetry openTelemetry = initializeOpenTelemetry();
37-
// Install OpenTelemetry in log4j appender
38-
io.opentelemetry.instrumentation.log4j.appender.v2_17.OpenTelemetryAppender.install(
39-
openTelemetry);
40-
// Install OpenTelemetry in logback appender
41-
io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender.install(
42-
openTelemetry);
43-
4426
// Route JUL logs to slf4j
4527
SLF4JBridgeHandler.removeHandlersForRootLogger();
4628
SLF4JBridgeHandler.install();
@@ -86,7 +68,7 @@ public static void main(String[] args) {
8668
// existing frameworks into the OpenTelemetry Log Bridge API. These APIs
8769
// SHOULD NOT be used by end users in place of existing log APIs (i.e. Log4j, Slf4, JUL).
8870
io.opentelemetry.api.logs.Logger customAppenderLogger =
89-
openTelemetry.getLogsBridge().get("custom-log-appender");
71+
GlobalOpenTelemetry.get().getLogsBridge().get("custom-log-appender");
9072
maybeRunWithSpan(
9173
() ->
9274
customAppenderLogger
@@ -107,31 +89,6 @@ public static void main(String[] args) {
10789
true);
10890
}
10991

110-
private static OpenTelemetry initializeOpenTelemetry() {
111-
OpenTelemetrySdk sdk =
112-
OpenTelemetrySdk.builder()
113-
.setTracerProvider(SdkTracerProvider.builder().setSampler(Sampler.alwaysOn()).build())
114-
.setLoggerProvider(
115-
SdkLoggerProvider.builder()
116-
.setResource(
117-
Resource.getDefault().toBuilder()
118-
.put(ResourceAttributes.SERVICE_NAME, "log4j-example")
119-
.build())
120-
.addLogRecordProcessor(
121-
BatchLogRecordProcessor.builder(
122-
OtlpGrpcLogRecordExporter.builder()
123-
.setEndpoint("http://localhost:4317")
124-
.build())
125-
.build())
126-
.build())
127-
.build();
128-
129-
// Add hook to close SDK, which flushes logs
130-
Runtime.getRuntime().addShutdownHook(new Thread(sdk::close));
131-
132-
return sdk;
133-
}
134-
13592
private static void maybeRunWithSpan(Runnable runnable, boolean withSpan) {
13693
if (!withSpan) {
13794
runnable.run();

0 commit comments

Comments
 (0)