|
3 lat temu | |
---|---|---|
.. | ||
src | 3 lat temu | |
README.md | 3 lat temu | |
build.gradle.kts | 3 lat temu |
This module provides Log4j2 extensions related to OpenTelemetry.
To use it, add the module to your application's runtime classpath.
Maven
<dependencies>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-log4j-2.13.2</artifactId>
<version>0.17.0-alpha</version>
<scope>runtime</scope>
</dependency>
</dependencies>
Gradle
dependencies {
runtimeOnly("io.opentelemetry.instrumentation:opentelemetry-log4j-2.13.2:0.17.0-alpha")
}
OpenTelemetryContextDataProvider
implements the Log4j2 ContextDataProvider
SPI, and injects the
trace ID and span ID from an active span into
Log4j's context data.
Note: Depending on your application, you may run into
a critical bug
with Log4j 2.13.2. If log messages show a NullPointerException
when adding this instrumentation,
please update to 2.13.3 or higher. The only change between 2.13.2 and 2.13.3 is the fix to this
issue.
Log4j will automatically pick up the integration when you include this module. The following keys will be added to the context when a log statement is made when a span is active:
trace_id
span_id
trace_flags
You can use these keys when defining an appender in your log4j.xml
configuration, for example:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root>
<AppenderRef ref="Console" level="All"/>
</Root>
</Loggers>
</Configuration>
OpenTelemetryAppender
is a
Log4j2 appender that can be used to
forward log events to
the OpenTelemetry Log SDK
.
The following demonstrates how you might configure the appender in your log4j.xml
configuration:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" packages="io.opentelemetry.instrumentation.log4j.v2_16">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} traceId: %X{trace_id} spanId: %X{span_id} flags: %X{trace_flags} - %msg%n"/>
</Console>
<OpenTelemetry name="OpenTelemetryAppender"/>
</Appenders>
<Loggers>
<Root>
<AppenderRef ref="OpenTelemetryAppender" level="All"/>
<AppenderRef ref="Console" level="All"/>
</Root>
</Loggers>
</Configuration>
Next, associate the OpenTelemetryAppender
with a SdkLogEmitterProvider
in your application:
SdkLogEmitterProvider logEmitterProvider =
SdkLogEmitterProvider.builder()
.setResource(Resource.create(...))
.addLogProcessor(...)
.build();
OpenTelemetryLog4j.initialize(logEmitterProvider);
Note: In order to initialize the OpenTelemetryAppender
your application must depend on the
OpenTelemetry log sdk (io.opentelemetry:opentelemetry-sdk-logs
).
In this example Log4j2 logs will be sent to both the console appender and
the OpenTelemetryAppender
, which will drop the logs until OpenTelemetryLog4j.initialize(..)
is
called. Once initialized, logs will be emitted to a LogEmitter
obtained from
the SdkLogEmitterProvider
.