From b4f51c50f20a2ea1057d94741565775923e959c9 Mon Sep 17 00:00:00 2001 From: Nikita Tkachenko Date: Tue, 11 Jun 2024 13:59:58 +0200 Subject: [PATCH] Start Datadog appender when doing agentless log submission for Log4j2 --- .../log4j2/LoggerConfigInstrumentation.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dd-java-agent/instrumentation/log4j2/logs-intake/src/main/java/datadog/trace/instrumentation/log4j2/LoggerConfigInstrumentation.java b/dd-java-agent/instrumentation/log4j2/logs-intake/src/main/java/datadog/trace/instrumentation/log4j2/LoggerConfigInstrumentation.java index fa26b86580f..c5aad27353f 100644 --- a/dd-java-agent/instrumentation/log4j2/logs-intake/src/main/java/datadog/trace/instrumentation/log4j2/LoggerConfigInstrumentation.java +++ b/dd-java-agent/instrumentation/log4j2/logs-intake/src/main/java/datadog/trace/instrumentation/log4j2/LoggerConfigInstrumentation.java @@ -6,9 +6,11 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; +import java.util.Map; import java.util.Set; import net.bytebuddy.asm.Advice; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.config.LoggerConfig; @AutoService(InstrumenterModule.class) @@ -44,7 +46,18 @@ public void methodAdvice(MethodTransformer transformer) { public static class LoggerConfigConstructorAdvice { @Advice.OnMethodExit(suppress = Throwable.class) public static void onExit(@Advice.This LoggerConfig loggerConfig) { + Map appenders = loggerConfig.getAppenders(); + if (appenders != null) { + for (Appender appender : appenders.values()) { + if (appender instanceof DatadogAppender) { + return; + } + } + } + DatadogAppender appender = new DatadogAppender("datadog", null); + appender.start(); + Config config = Config.get(); Level level = Level.valueOf(config.getAgentlessLogSubmissionLevel()); loggerConfig.addAppender(appender, level, null);