From 2dfeef74dc200c925cf4f398bbb721c8d1ed7435 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 3 Mar 2025 13:43:53 -0500 Subject: [PATCH 01/16] trigger ci --- .../src/main/java/datadog/trace/api/ConfigDefaults.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index af1be8804ee..6cf10a5acc8 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -99,7 +99,7 @@ public final class ConfigDefaults { static final boolean DEFAULT_PERF_METRICS_ENABLED = false; // No default constants for metrics statsd support -- falls back to jmxfetch values - static final boolean DEFAULT_LOGS_INJECTION_ENABLED = true; + static final boolean DEFAULT_LOGS_INJECTION_ENABLED = false; static final String DEFAULT_APPSEC_ENABLED = "inactive"; static final boolean DEFAULT_APPSEC_REPORTING_INBAND = false; @@ -229,7 +229,7 @@ public final class ConfigDefaults { static final int DEFAULT_TELEMETRY_DEPENDENCY_RESOLUTION_QUEUE_SIZE = 100000; static final boolean DEFAULT_TRACE_128_BIT_TRACEID_GENERATION_ENABLED = true; - static final boolean DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED = false; + static final boolean DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED = true; static final boolean DEFAULT_SECURE_RANDOM = false; public static final int DEFAULT_TRACE_X_DATADOG_TAGS_MAX_LENGTH = 512; From cb696e8a5d5054773c2429457bba817b6547ca3d Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 3 Mar 2025 18:01:27 -0500 Subject: [PATCH 02/16] fixing tests --- .../test/log/injection/LogContextInjectionTestBase.groovy | 4 ++++ .../src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy | 4 ++++ .../src/test/groovy/CorrelationIdInjectorTest.groovy | 1 + .../test/groovy/datadog/trace/api/ConfigCollectorTest.groovy | 2 +- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy index d40eacdd552..33e995973b2 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy @@ -34,6 +34,10 @@ abstract class LogContextInjectionTestBase extends AgentTestRunner { abstract Map getMap() + def setup() { + injectSysConfig("logs.injection.enabled", "true") + } + def "Log context shows trace and span ids for active scope"() { when: put("foo", "bar") diff --git a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy index c8c31db7d26..16831fe97fb 100644 --- a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy +++ b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy @@ -46,6 +46,10 @@ abstract class QuarkusSmokeTest extends AbstractServerSmokeTest { abstract String helloEndpointName() abstract String resourceName() +// +// def setup() { +// injectSysConfig("logs.injection.enabled", "true") +// } def "get welcome endpoint in parallel"() { expect: diff --git a/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy b/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy index 66969d9cc9f..0b2ec401cf6 100644 --- a/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy +++ b/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy @@ -8,6 +8,7 @@ abstract class CorrelationIdInjectorTest extends DDSpecification { def "test correlation id injection"() { setup: + injectSysConfig("logs.injection.enabled", "true") def tracer = buildTracer() def journal = buildJournal() def logger = buildLogger() diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy index 12a52136eb0..02f149da6a9 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy @@ -185,7 +185,7 @@ class ConfigCollectorTest extends DDSpecification { "data.streams.enabled" | "false" "trace.tags" | "" "trace.header.tags" | "" - "logs.injection.enabled" | "true" + "logs.injection.enabled" | "false" // defaults to null meaning sample everything but not exactly the same as when explicitly set to 1.0 "trace.sample.rate" | null } From 26a26b351b01b7cc4382c770ead55f71bfbc6834 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 4 Mar 2025 11:27:00 -0500 Subject: [PATCH 03/16] fixing smoke test --- .../groovy/datadog/smoketest/QuarkusSmokeTest.groovy | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy index 16831fe97fb..97b38c533bc 100644 --- a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy +++ b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy @@ -19,6 +19,7 @@ abstract class QuarkusSmokeTest extends AbstractServerSmokeTest { command.addAll((String[]) [ "-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter", "-Ddd.app.customlogmanager=true", + "-Ddd.logs.injection=true", "-Dquarkus.http.port=${httpPort}", "-jar", quarkusUberJar @@ -46,10 +47,10 @@ abstract class QuarkusSmokeTest extends AbstractServerSmokeTest { abstract String helloEndpointName() abstract String resourceName() -// -// def setup() { -// injectSysConfig("logs.injection.enabled", "true") -// } + // + // def setup() { + // injectSysConfig("logs.injection.enabled", "true") + // } def "get welcome endpoint in parallel"() { expect: From 428188210d64cdb16dff8c625a38a46fd52a74e6 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 4 Mar 2025 12:22:35 -0500 Subject: [PATCH 04/16] running CI --- .../datadog/smoketest/LogInjectionSmokeTest.groovy | 2 ++ .../groovy/datadog/smoketest/AbstractSmokeTest.groovy | 1 + .../main/java/datadog/trace/api/config/TracerConfig.java | 3 +++ internal-api/src/main/java/datadog/trace/api/Config.java | 8 ++++++++ .../src/test/groovy/datadog/trace/api/ConfigTest.groovy | 9 +++++++++ 5 files changed, 23 insertions(+) diff --git a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy index e36b922ab78..eb6052c6054 100644 --- a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy +++ b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy @@ -72,6 +72,7 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { command.addAll(defaultJavaProperties) // turn off these features as their debug output can break up our expected logging lines on IBM JVMs // causing random test failures (we are not testing these features here so they don't need to be on) + command.add("-Ddd.logs.injection=true") command.add("-Ddd.instrumentation.telemetry.enabled=false") command.removeAll { it.startsWith("-Ddd.profiling")} command.add("-Ddd.profiling.enabled=false") @@ -321,6 +322,7 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { if (trace128bits) { assert traceId.matches("[0-9a-z]{32}") } else { + System.out.println(traceId) assert traceId.matches("\\d+") } } diff --git a/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy b/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy index 0d1192696f5..5d111bfda0f 100644 --- a/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy +++ b/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy @@ -179,6 +179,7 @@ abstract class AbstractSmokeTest extends ProcessManager { "-Ddd.trace.agent.port=${server.address.port}", "-Ddd.env=${ENV}", "-Ddd.version=${VERSION}", + "-Ddd.logs.injection=true", "-Ddd.profiling.enabled=true", "-Ddd.profiling.start-delay=${PROFILING_START_DELAY_SECONDS}", "-Ddd.profiling.upload.period=${PROFILING_RECORDING_UPLOAD_PERIOD_SECONDS}", diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java index b3426d8d989..dc501e23236 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java @@ -34,6 +34,9 @@ public final class TracerConfig { @Deprecated public static final String TRACE_RESOLVER_ENABLED = "trace.resolver.enabled"; public static final String SERVICE_MAPPING = "service.mapping"; + public static final String TRACE_EXPERIMENTAL_FEATURES_ENABLED = + "trace.experimental.features.enabled"; + public static final String SPAN_TAGS = "trace.span.tags"; public static final String TRACE_ANALYTICS_ENABLED = "trace.analytics.enabled"; diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index d758f675c32..23d8c0a8d67 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -555,6 +555,7 @@ public static String getHostName() { private final long dependecyResolutionPeriodMillis; private final boolean apmTracingEnabled; + private final List experimentalFeaturesEnabled; // Read order: System Properties -> Env Variables, [-> properties file], [-> default value] private Config() { @@ -620,6 +621,9 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins configProvider.getString( SERVLET_ROOT_CONTEXT_SERVICE_NAME, DEFAULT_SERVLET_ROOT_CONTEXT_SERVICE_NAME); + experimentalFeaturesEnabled = + configProvider.getList(TRACE_EXPERIMENTAL_FEATURES_ENABLED, new ArrayList<>()); + integrationSynapseLegacyOperationName = configProvider.getBoolean(INTEGRATION_SYNAPSE_LEGACY_OPERATION_NAME, false); writerType = configProvider.getString(WRITER_TYPE, DEFAULT_AGENT_WRITER_TYPE); @@ -1986,6 +1990,10 @@ public String getRootContextServiceName() { return rootContextServiceName; } + public List getExperimentalFeaturesEnabled() { + return experimentalFeaturesEnabled; + } + public boolean isTraceEnabled() { return instrumenterConfig.isTraceEnabled(); } diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index b3e2a3d9b09..1abd4884836 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -106,6 +106,7 @@ import static datadog.trace.api.config.TracerConfig.HTTP_CLIENT_ERROR_STATUSES import static datadog.trace.api.config.TracerConfig.HTTP_SERVER_ERROR_STATUSES import static datadog.trace.api.config.TracerConfig.ID_GENERATION_STRATEGY import static datadog.trace.api.config.TracerConfig.PARTIAL_FLUSH_ENABLED +import static datadog.trace.api.config.TracerConfig.TRACE_EXPERIMENTAL_FEATURES_ENABLED import static datadog.trace.api.config.TracerConfig.TRACE_LONG_RUNNING_ENABLED import static datadog.trace.api.config.TracerConfig.TRACE_LONG_RUNNING_FLUSH_INTERVAL import static datadog.trace.api.config.TracerConfig.TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL @@ -220,6 +221,8 @@ class ConfigTest extends DDSpecification { prop.setProperty(TRACE_LONG_RUNNING_ENABLED, "true") prop.setProperty(TRACE_LONG_RUNNING_FLUSH_INTERVAL, "250") + prop.setProperty(TRACE_EXPERIMENTAL_FEATURES_ENABLED, "DD_TAGS, DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING") + prop.setProperty(PROFILING_ENABLED, "true") prop.setProperty(PROFILING_URL, "new url") prop.setProperty(PROFILING_TAGS, "f:6,host:test-host") @@ -311,6 +314,8 @@ class ConfigTest extends DDSpecification { config.isLongRunningTraceEnabled() config.getLongRunningTraceFlushInterval() == 250 + config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"] + config.profilingEnabled == true config.profilingUrl == "new url" config.mergedProfilingTags == [b: "2", f: "6", (HOST_TAG): "test-host", (RUNTIME_ID_TAG): config.getRuntimeId(), (RUNTIME_VERSION_TAG): config.getRuntimeVersion(), (SERVICE_TAG): config.serviceName, (LANGUAGE_TAG_KEY): LANGUAGE_TAG_VALUE] @@ -401,6 +406,8 @@ class ConfigTest extends DDSpecification { System.setProperty(PREFIX + TRACE_LONG_RUNNING_ENABLED, "true") System.setProperty(PREFIX + TRACE_LONG_RUNNING_FLUSH_INTERVAL, "333") + System.setProperty(PREFIX + TRACE_EXPERIMENTAL_FEATURES_ENABLED, "DD_TAGS, DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING") + System.setProperty(PREFIX + PROFILING_ENABLED, "true") System.setProperty(PREFIX + PROFILING_URL, "new url") System.setProperty(PREFIX + PROFILING_TAGS, "f:6,host:test-host") @@ -492,6 +499,8 @@ class ConfigTest extends DDSpecification { config.getLongRunningTraceFlushInterval() == 333 config.traceRateLimit == 200 + config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"] + config.profilingEnabled == true config.profilingUrl == "new url" config.mergedProfilingTags == [b: "2", f: "6", (HOST_TAG): "test-host", (RUNTIME_ID_TAG): config.getRuntimeId(), (RUNTIME_VERSION_TAG): config.getRuntimeVersion(), (SERVICE_TAG): config.serviceName, (LANGUAGE_TAG_KEY): LANGUAGE_TAG_VALUE] From 9aae508c44acefd04e23ef3fe68e521c12527f32 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 4 Mar 2025 13:26:43 -0500 Subject: [PATCH 05/16] fixing more smoke tests --- .../datadog/smoketest/LogInjectionSmokeTest.groovy | 9 ++++----- .../groovy/datadog/smoketest/QuarkusSmokeTest.groovy | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy index eb6052c6054..a8218d0f600 100644 --- a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy +++ b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy @@ -39,7 +39,7 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { boolean noTags = false @Shared - boolean trace128bits = false + boolean trace128bits = true @Shared @AutoCleanup @@ -72,7 +72,6 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { command.addAll(defaultJavaProperties) // turn off these features as their debug output can break up our expected logging lines on IBM JVMs // causing random test failures (we are not testing these features here so they don't need to be on) - command.add("-Ddd.logs.injection=true") command.add("-Ddd.instrumentation.telemetry.enabled=false") command.removeAll { it.startsWith("-Ddd.profiling")} command.add("-Ddd.profiling.enabled=false") @@ -87,9 +86,9 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { command.add("-Ddd.version=" as String) command.add("-Ddd.service.name=" as String) } - if (trace128bits) { - command.add("-Ddd.$TRACE_128_BIT_TRACEID_GENERATION_ENABLED=true" as String) - command.add("-Ddd.$TRACE_128_BIT_TRACEID_LOGGING_ENABLED=true" as String) + if (!trace128bits) { + command.add("-Ddd.$TRACE_128_BIT_TRACEID_GENERATION_ENABLED=false" as String) + command.add("-Ddd.$TRACE_128_BIT_TRACEID_LOGGING_ENABLED=false" as String) } if (supportsDirectLogSubmission()) { command.add("-Ddd.$GeneralConfig.AGENTLESS_LOG_SUBMISSION_ENABLED=true" as String) diff --git a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy index 97b38c533bc..5b92c276748 100644 --- a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy +++ b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy @@ -19,7 +19,6 @@ abstract class QuarkusSmokeTest extends AbstractServerSmokeTest { command.addAll((String[]) [ "-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter", "-Ddd.app.customlogmanager=true", - "-Ddd.logs.injection=true", "-Dquarkus.http.port=${httpPort}", "-jar", quarkusUberJar From f0b15b4875c85f721d286999624281169d62d80e Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 4 Mar 2025 15:54:45 -0500 Subject: [PATCH 06/16] cleanup --- .../groovy/datadog/smoketest/LogInjectionSmokeTest.groovy | 1 - .../src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy | 4 ---- 2 files changed, 5 deletions(-) diff --git a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy index a8218d0f600..03e2d12f498 100644 --- a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy +++ b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy @@ -321,7 +321,6 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { if (trace128bits) { assert traceId.matches("[0-9a-z]{32}") } else { - System.out.println(traceId) assert traceId.matches("\\d+") } } diff --git a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy index 5b92c276748..c8c31db7d26 100644 --- a/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy +++ b/dd-smoke-tests/quarkus/src/test/groovy/datadog/smoketest/QuarkusSmokeTest.groovy @@ -46,10 +46,6 @@ abstract class QuarkusSmokeTest extends AbstractServerSmokeTest { abstract String helloEndpointName() abstract String resourceName() - // - // def setup() { - // injectSysConfig("logs.injection.enabled", "true") - // } def "get welcome endpoint in parallel"() { expect: From b24d13beb7c2e17ac82398e56eec5a987902f9b7 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 5 Mar 2025 11:15:41 -0500 Subject: [PATCH 07/16] testing islogging128bittraceidenabled migration to config --- .../jbosslogmanager/ExtLogRecordInstrumentation.java | 6 ++---- .../log4j27/SpanDecoratingContextDataInjector.java | 3 +-- .../log4j1/LoggingEventInstrumentation.java | 6 ++---- .../logback/LoggingEventInstrumentation.java | 3 +-- .../tinylog2/LogEntryInstrumentation.java | 3 +-- .../src/main/java/datadog/trace/core/CoreTracer.java | 3 +-- .../src/main/java/datadog/trace/api/Config.java | 10 ++++++++++ .../java/datadog/trace/api/InstrumenterConfig.java | 11 +---------- 8 files changed, 19 insertions(+), 26 deletions(-) diff --git a/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java b/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java index 49256005b4b..f41b2523a7f 100644 --- a/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java +++ b/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java @@ -15,7 +15,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -113,8 +112,7 @@ public static void getMdcValue( case "dd.trace_id": if (context != null) { DDTraceId traceId = context.getTraceId(); - if (traceId.toHighOrderLong() != 0 - && InstrumenterConfig.get().isLogs128bTraceIdEnabled()) { + if (traceId.toHighOrderLong() != 0 && Config.get().isLogs128bTraceIdEnabled()) { value = traceId.toHexString(); } else { value = traceId.toString(); @@ -155,7 +153,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - InstrumenterConfig.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); correlationValues.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java b/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java index b5d685a3690..2172636404d 100644 --- a/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java +++ b/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java @@ -11,7 +11,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.Tags; import java.util.List; @@ -57,7 +56,7 @@ public StringMap injectContextData(List list, StringMap reusable) { if (span != null) { DDTraceId traceId = span.context().getTraceId(); String traceIdValue = - InstrumenterConfig.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); newContextData.putValue(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java b/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java index 91762a7d498..3d0917a503a 100644 --- a/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java +++ b/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java @@ -13,7 +13,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -95,8 +94,7 @@ public static void getMdcValue( case "dd.trace_id": if (context != null) { DDTraceId traceId = context.getTraceId(); - if (traceId.toHighOrderLong() != 0 - && InstrumenterConfig.get().isLogs128bTraceIdEnabled()) { + if (traceId.toHighOrderLong() != 0 && Config.get().isLogs128bTraceIdEnabled()) { value = traceId.toHexString(); } else { value = traceId.toString(); @@ -157,7 +155,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - InstrumenterConfig.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); mdc.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java b/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java index ba9c2a85bee..c04bccca0bc 100644 --- a/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java +++ b/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java @@ -15,7 +15,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -90,7 +89,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - InstrumenterConfig.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); correlationValues.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java b/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java index 780857c2ddc..18bb26db8a6 100644 --- a/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java +++ b/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java @@ -13,7 +13,6 @@ import datadog.trace.api.CorrelationIdentifier; import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; -import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.InstrumentationContext; import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -83,7 +82,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - InstrumenterConfig.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); correlationValues.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index b9a3d5f07da..4467d239ea5 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -30,7 +30,6 @@ import datadog.trace.api.DynamicConfig; import datadog.trace.api.EndpointTracker; import datadog.trace.api.IdGenerationStrategy; -import datadog.trace.api.InstrumenterConfig; import datadog.trace.api.StatsDClient; import datadog.trace.api.TraceConfig; import datadog.trace.api.config.GeneralConfig; @@ -610,7 +609,7 @@ private CoreTracer( .setTracingTags(config.getMergedSpanTags()) .apply(); - this.logs128bTraceIdEnabled = InstrumenterConfig.get().isLogs128bTraceIdEnabled(); + this.logs128bTraceIdEnabled = Config.get().isLogs128bTraceIdEnabled(); this.partialFlushMinSpans = partialFlushMinSpans; this.idGenerationStrategy = null == idGenerationStrategy diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 23d8c0a8d67..9d6fbcd3122 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -480,6 +480,7 @@ public static String getHostName() { private final boolean secureRandom; private final boolean trace128bitTraceIdGenerationEnabled; + private final boolean logs128bTraceIdEnabled; private final Set grpcIgnoredInboundMethods; private final Set grpcIgnoredOutboundMethods; @@ -655,6 +656,11 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins configProvider.getBoolean( TRACE_128_BIT_TRACEID_GENERATION_ENABLED, DEFAULT_TRACE_128_BIT_TRACEID_GENERATION_ENABLED); + + logs128bTraceIdEnabled = + configProvider.getBoolean( + TRACE_128_BIT_TRACEID_LOGGING_ENABLED, DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED); + if (secureRandom) { strategyName = "SECURE_RANDOM"; } @@ -3398,6 +3404,10 @@ public boolean isTrace128bitTraceIdGenerationEnabled() { return trace128bitTraceIdGenerationEnabled; } + public boolean isLogs128bTraceIdEnabled() { + return logs128bTraceIdEnabled; + } + public Set getGrpcIgnoredInboundMethods() { return grpcIgnoredInboundMethods; } diff --git a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java index 2732e02746b..f98b60d8f91 100644 --- a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java +++ b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java @@ -11,7 +11,6 @@ import static datadog.trace.api.ConfigDefaults.DEFAULT_RUNTIME_CONTEXT_FIELD_INJECTION; import static datadog.trace.api.ConfigDefaults.DEFAULT_SERIALVERSIONUID_FIELD_INJECTION; import static datadog.trace.api.ConfigDefaults.DEFAULT_TELEMETRY_ENABLED; -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED; import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_ANNOTATIONS; import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_ANNOTATION_ASYNC; import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_ENABLED; @@ -51,7 +50,6 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.RESOLVER_USE_URL_CACHES; import static datadog.trace.api.config.TraceInstrumentationConfig.RUNTIME_CONTEXT_FIELD_INJECTION; import static datadog.trace.api.config.TraceInstrumentationConfig.SERIALVERSIONUID_FIELD_INJECTION; -import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_128_BIT_TRACEID_LOGGING_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ANNOTATIONS; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ANNOTATION_ASYNC; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_CLASSES_EXCLUDE; @@ -105,7 +103,6 @@ public class InstrumenterConfig { private final boolean codeOriginEnabled; private final boolean traceEnabled; private final boolean traceOtelEnabled; - private final boolean logs128bTraceIdEnabled; private final ProfilingEnablement profilingEnabled; private final boolean ciVisibilityEnabled; private final ProductActivation appSecActivation; @@ -182,9 +179,7 @@ private InstrumenterConfig() { CODE_ORIGIN_FOR_SPANS_ENABLED, DEFAULT_CODE_ORIGIN_FOR_SPANS_ENABLED); traceEnabled = configProvider.getBoolean(TRACE_ENABLED, DEFAULT_TRACE_ENABLED); traceOtelEnabled = configProvider.getBoolean(TRACE_OTEL_ENABLED, DEFAULT_TRACE_OTEL_ENABLED); - logs128bTraceIdEnabled = - configProvider.getBoolean( - TRACE_128_BIT_TRACEID_LOGGING_ENABLED, DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED); + profilingEnabled = ProfilingEnablement.of( configProvider.getString(PROFILING_ENABLED, String.valueOf(PROFILING_ENABLED_DEFAULT))); @@ -336,10 +331,6 @@ public boolean isTraceOtelEnabled() { return traceOtelEnabled; } - public boolean isLogs128bTraceIdEnabled() { - return logs128bTraceIdEnabled; - } - public boolean isProfilingEnabled() { return profilingEnabled.isActive(); } From 00ab3900883893d10150cddf987d070b2ed7b671 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 5 Mar 2025 11:22:47 -0500 Subject: [PATCH 08/16] fixing small error --- internal-api/src/main/java/datadog/trace/api/Config.java | 2 ++ .../src/main/java/datadog/trace/api/InstrumenterConfig.java | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 9d6fbcd3122..4765be7c21c 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -4632,6 +4632,8 @@ public String toString() { + idGenerationStrategy + ", trace128bitTraceIdGenerationEnabled=" + trace128bitTraceIdGenerationEnabled + + ", logs128bTraceIdEnabled=" + + logs128bTraceIdEnabled + ", grpcIgnoredInboundMethods=" + grpcIgnoredInboundMethods + ", grpcIgnoredOutboundMethods=" diff --git a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java index f98b60d8f91..b3fe83074af 100644 --- a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java +++ b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java @@ -548,8 +548,6 @@ public String toString() { + traceEnabled + ", traceOtelEnabled=" + traceOtelEnabled - + ", logs128bTraceIdEnabled=" - + logs128bTraceIdEnabled + ", profilingEnabled=" + profilingEnabled + ", ciVisibilityEnabled=" From 48a8059f8b555ce152d978adb25b0ad4e6be1025 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Thu, 6 Mar 2025 10:16:27 -0500 Subject: [PATCH 09/16] adding to toString --- internal-api/src/main/java/datadog/trace/api/Config.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 4765be7c21c..8bd0345270d 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -4316,6 +4316,8 @@ public String toString() { + serviceNameSetByUser + ", rootContextServiceName=" + rootContextServiceName + + ", experimentalFeaturesEnabled=" + + experimentalFeaturesEnabled + ", integrationSynapseLegacyOperationName=" + integrationSynapseLegacyOperationName + ", writerType='" From da164b0edf3b534f05fa20d4be2f804536820a12 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 7 Mar 2025 11:02:55 -0500 Subject: [PATCH 10/16] updating experimental features from list to set --- internal-api/src/main/java/datadog/trace/api/Config.java | 6 +++--- .../src/test/groovy/datadog/trace/api/ConfigTest.groovy | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 8def30dc6b8..c621f743d23 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -560,7 +560,7 @@ public static String getHostName() { private final long dependecyResolutionPeriodMillis; private final boolean apmTracingEnabled; - private final List experimentalFeaturesEnabled; + private final Set experimentalFeaturesEnabled; // Read order: System Properties -> Env Variables, [-> properties file], [-> default value] private Config() { @@ -627,7 +627,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins SERVLET_ROOT_CONTEXT_SERVICE_NAME, DEFAULT_SERVLET_ROOT_CONTEXT_SERVICE_NAME); experimentalFeaturesEnabled = - configProvider.getList(TRACE_EXPERIMENTAL_FEATURES_ENABLED, new ArrayList<>()); + configProvider.getSet(TRACE_EXPERIMENTAL_FEATURES_ENABLED, new HashSet<>()); integrationSynapseLegacyOperationName = configProvider.getBoolean(INTEGRATION_SYNAPSE_LEGACY_OPERATION_NAME, false); @@ -2012,7 +2012,7 @@ public String getRootContextServiceName() { return rootContextServiceName; } - public List getExperimentalFeaturesEnabled() { + public Set getExperimentalFeaturesEnabled() { return experimentalFeaturesEnabled; } diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 1851d4de6e4..1e661867875 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -315,7 +315,7 @@ class ConfigTest extends DDSpecification { config.isLongRunningTraceEnabled() config.getLongRunningTraceFlushInterval() == 250 - config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"] + config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"].toSet() config.profilingEnabled == true config.profilingUrl == "new url" @@ -500,7 +500,7 @@ class ConfigTest extends DDSpecification { config.getLongRunningTraceFlushInterval() == 333 config.traceRateLimit == 200 - config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"] + config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"].toSet() config.profilingEnabled == true config.profilingUrl == "new url" From 8675886a736869d21f8b42b50b4fb13d0db29df0 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 11 Mar 2025 16:42:43 -0400 Subject: [PATCH 11/16] updating PR comments --- .../ExtLogRecordInstrumentation.java | 4 ++-- .../SpanDecoratingContextDataInjector.java | 2 +- .../log4j1/LoggingEventInstrumentation.java | 4 ++-- .../logback/LoggingEventInstrumentation.java | 2 +- .../tinylog2/LogEntryInstrumentation.java | 2 +- .../java/datadog/trace/core/CoreTracer.java | 2 +- .../main/java/datadog/trace/api/Config.java | 24 ++++++++++++------- 7 files changed, 23 insertions(+), 17 deletions(-) diff --git a/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java b/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java index f41b2523a7f..2fa477ed99f 100644 --- a/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java +++ b/dd-java-agent/instrumentation/jboss-logmanager/src/main/java/datadog/trace/instrumentation/jbosslogmanager/ExtLogRecordInstrumentation.java @@ -112,7 +112,7 @@ public static void getMdcValue( case "dd.trace_id": if (context != null) { DDTraceId traceId = context.getTraceId(); - if (traceId.toHighOrderLong() != 0 && Config.get().isLogs128bTraceIdEnabled()) { + if (traceId.toHighOrderLong() != 0 && Config.get().isLogs128bitTraceIdEnabled()) { value = traceId.toHexString(); } else { value = traceId.toString(); @@ -153,7 +153,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bitTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); correlationValues.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java b/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java index 2172636404d..5403c7321c2 100644 --- a/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java +++ b/dd-java-agent/instrumentation/log4j-2.7/src/main/java/datadog/trace/instrumentation/log4j27/SpanDecoratingContextDataInjector.java @@ -56,7 +56,7 @@ public StringMap injectContextData(List list, StringMap reusable) { if (span != null) { DDTraceId traceId = span.context().getTraceId(); String traceIdValue = - Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bitTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); newContextData.putValue(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java b/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java index 3d0917a503a..134c065ef26 100644 --- a/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java +++ b/dd-java-agent/instrumentation/log4j1/src/main/java/datadog/trace/instrumentation/log4j1/LoggingEventInstrumentation.java @@ -94,7 +94,7 @@ public static void getMdcValue( case "dd.trace_id": if (context != null) { DDTraceId traceId = context.getTraceId(); - if (traceId.toHighOrderLong() != 0 && Config.get().isLogs128bTraceIdEnabled()) { + if (traceId.toHighOrderLong() != 0 && Config.get().isLogs128bitTraceIdEnabled()) { value = traceId.toHexString(); } else { value = traceId.toString(); @@ -155,7 +155,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bitTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); mdc.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java b/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java index c04bccca0bc..c3fb0528e05 100644 --- a/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java +++ b/dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java @@ -89,7 +89,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bitTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); correlationValues.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java b/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java index 18bb26db8a6..d2a870d1ddd 100644 --- a/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java +++ b/dd-java-agent/instrumentation/tinylog-2/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java @@ -82,7 +82,7 @@ public static void onExit( if (context != null) { DDTraceId traceId = context.getTraceId(); String traceIdValue = - Config.get().isLogs128bTraceIdEnabled() && traceId.toHighOrderLong() != 0 + Config.get().isLogs128bitTraceIdEnabled() && traceId.toHighOrderLong() != 0 ? traceId.toHexString() : traceId.toString(); correlationValues.put(CorrelationIdentifier.getTraceIdKey(), traceIdValue); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index 9281c1f49a8..cfdd85fa2c4 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -606,7 +606,7 @@ private CoreTracer( .setTracingTags(config.getMergedSpanTags()) .apply(); - this.logs128bTraceIdEnabled = Config.get().isLogs128bTraceIdEnabled(); + this.logs128bTraceIdEnabled = Config.get().isLogs128bitTraceIdEnabled(); this.partialFlushMinSpans = partialFlushMinSpans; this.idGenerationStrategy = null == idGenerationStrategy diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 936fd7338cb..534e4bf090e 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -483,7 +483,7 @@ public static String getHostName() { private final boolean secureRandom; private final boolean trace128bitTraceIdGenerationEnabled; - private final boolean logs128bTraceIdEnabled; + private final boolean logs128bitTraceIdEnabled; private final Set grpcIgnoredInboundMethods; private final Set grpcIgnoredOutboundMethods; @@ -664,7 +664,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins TRACE_128_BIT_TRACEID_GENERATION_ENABLED, DEFAULT_TRACE_128_BIT_TRACEID_GENERATION_ENABLED); - logs128bTraceIdEnabled = + logs128bitTraceIdEnabled = configProvider.getBoolean( TRACE_128_BIT_TRACEID_LOGGING_ENABLED, DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED); @@ -1031,9 +1031,15 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins clockSyncPeriod = configProvider.getInteger(CLOCK_SYNC_PERIOD, DEFAULT_CLOCK_SYNC_PERIOD); - logsInjectionEnabled = - configProvider.getBoolean( - LOGS_INJECTION_ENABLED, DEFAULT_LOGS_INJECTION_ENABLED, LOGS_INJECTION); + if (experimentalFeaturesEnabled.contains( + propertyNameToEnvironmentVariableName(LOGS_INJECTION))) { + logsInjectionEnabled = + configProvider.getBoolean( + LOGS_INJECTION_ENABLED, DEFAULT_LOGS_INJECTION_ENABLED, LOGS_INJECTION); + } else { + logsInjectionEnabled = + configProvider.getBoolean(LOGS_INJECTION_ENABLED, false, LOGS_INJECTION); + } dogStatsDNamedPipe = configProvider.getString(DOGSTATSD_NAMED_PIPE); @@ -3456,8 +3462,8 @@ public boolean isTrace128bitTraceIdGenerationEnabled() { return trace128bitTraceIdGenerationEnabled; } - public boolean isLogs128bTraceIdEnabled() { - return logs128bTraceIdEnabled; + public boolean isLogs128bitTraceIdEnabled() { + return logs128bitTraceIdEnabled; } public Set getGrpcIgnoredInboundMethods() { @@ -4706,8 +4712,8 @@ public String toString() { + idGenerationStrategy + ", trace128bitTraceIdGenerationEnabled=" + trace128bitTraceIdGenerationEnabled - + ", logs128bTraceIdEnabled=" - + logs128bTraceIdEnabled + + ", logs128bitTraceIdEnabled=" + + logs128bitTraceIdEnabled + ", grpcIgnoredInboundMethods=" + grpcIgnoredInboundMethods + ", grpcIgnoredOutboundMethods=" From 8c7027bb71136422919e4b25001be791c797d3bf Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 12 Mar 2025 11:28:38 -0400 Subject: [PATCH 12/16] Adding test to verify behavior for configs under feature falg --- .../groovy/datadog/trace/api/ConfigTest.groovy | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 1e661867875..2e8ea3f551b 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -10,6 +10,7 @@ import org.junit.Rule import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_ERROR_STATUSES import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ERROR_STATUSES +import static datadog.trace.api.ConfigDefaults.DEFAULT_LOGS_INJECTION_ENABLED import static datadog.trace.api.ConfigDefaults.DEFAULT_PARTIAL_FLUSH_MIN_SPANS import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVICE_NAME import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL @@ -1876,6 +1877,20 @@ class ConfigTest extends DDSpecification { [serviceProperty, serviceName] << [[SERVICE, SERVICE_NAME], [DEFAULT_SERVICE_NAME, "my-service"]].combinations() } + def "verify behavior of features under DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED"() { + setup: + environmentVariables.set("DD_TRACE_EXPERIMENTAL_FEATURES_ENABLED", "DD_LOGS_INJECTION") + + when: + def config = new Config() + + then: + config.experimentalFeaturesEnabled == ["DD_LOGS_INJECTION"].toSet() + + //verify expected behavior enabled under feature flag + config.logsInjectionEnabled == DEFAULT_LOGS_INJECTION_ENABLED + } + def "detect if agent is configured using default values"() { setup: if (host != null) { From 6dc399a103fb295e3434b2ba56e4c604b61c5e98 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Fri, 14 Mar 2025 16:07:34 -0400 Subject: [PATCH 13/16] updating test --- .../src/test/groovy/datadog/trace/api/ConfigTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 174cfed6a0f..14143b8bff9 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -1917,7 +1917,7 @@ class ConfigTest extends DDSpecification { config.experimentalFeaturesEnabled == [].toSet() //verify expected behavior when not enabled under feature flag - config.logsInjectionEnabled == true + config.logsInjectionEnabled == false config.globalTags == [env:"test", aKey:"aVal", bKey:"bVal"] } From df2dffbf836acf6cbef6bf406273dabdaab86d85 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 17 Mar 2025 10:29:05 -0400 Subject: [PATCH 14/16] updating config value when not under breaking_changed feature flag --- internal-api/src/main/java/datadog/trace/api/Config.java | 2 +- .../src/test/groovy/datadog/trace/api/ConfigTest.groovy | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 8d30374875b..b2ca4296c48 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -1045,7 +1045,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins LOGS_INJECTION_ENABLED, DEFAULT_LOGS_INJECTION_ENABLED, LOGS_INJECTION); } else { logsInjectionEnabled = - configProvider.getBoolean(LOGS_INJECTION_ENABLED, false, LOGS_INJECTION); + configProvider.getBoolean(LOGS_INJECTION_ENABLED, true, LOGS_INJECTION); } dogStatsDNamedPipe = configProvider.getString(DOGSTATSD_NAMED_PIPE); diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 14143b8bff9..174cfed6a0f 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -1917,7 +1917,7 @@ class ConfigTest extends DDSpecification { config.experimentalFeaturesEnabled == [].toSet() //verify expected behavior when not enabled under feature flag - config.logsInjectionEnabled == false + config.logsInjectionEnabled == true config.globalTags == [env:"test", aKey:"aVal", bKey:"bVal"] } From 35dc9237ca0eab9cdb403704404a1646f3e6c77f Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 17 Mar 2025 15:24:47 -0400 Subject: [PATCH 15/16] cleanup and nit responses --- .../main/groovy/datadog/smoketest/AbstractSmokeTest.groovy | 1 - .../src/main/java/datadog/trace/api/ConfigDefaults.java | 4 +++- .../src/test/groovy/CorrelationIdInjectorTest.groovy | 1 - internal-api/src/main/java/datadog/trace/api/Config.java | 6 +++--- .../src/test/groovy/datadog/trace/api/ConfigTest.groovy | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy b/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy index b225504ad31..e5d1c70f019 100644 --- a/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy +++ b/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractSmokeTest.groovy @@ -182,7 +182,6 @@ abstract class AbstractSmokeTest extends ProcessManager { "-Ddd.trace.agent.port=${server.address.port}", "-Ddd.env=${ENV}", "-Ddd.version=${VERSION}", - "-Ddd.logs.injection=true", "-Ddd.profiling.enabled=true", "-Ddd.profiling.start-delay=${PROFILING_START_DELAY_SECONDS}", "-Ddd.profiling.upload.period=${PROFILING_RECORDING_UPLOAD_PERIOD_SECONDS}", diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index 6b8b77b228a..26076ee7875 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -102,7 +102,9 @@ public final class ConfigDefaults { static final boolean DEFAULT_PERF_METRICS_ENABLED = false; // No default constants for metrics statsd support -- falls back to jmxfetch values - static final boolean DEFAULT_LOGS_INJECTION_ENABLED = false; + // Change value to be false in new release. Until then, manually set logs_injection default + // value to false if config is under breaking changes flag + static final boolean DEFAULT_LOGS_INJECTION_ENABLED = true; static final String DEFAULT_APPSEC_ENABLED = "inactive"; static final boolean DEFAULT_APPSEC_REPORTING_INBAND = false; diff --git a/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy b/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy index 0b2ec401cf6..66969d9cc9f 100644 --- a/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy +++ b/dd-trace-ot/correlation-id-injection/src/test/groovy/CorrelationIdInjectorTest.groovy @@ -8,7 +8,6 @@ abstract class CorrelationIdInjectorTest extends DDSpecification { def "test correlation id injection"() { setup: - injectSysConfig("logs.injection.enabled", "true") def tracer = buildTracer() def journal = buildJournal() def logger = buildLogger() diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 66f00a1c390..2a9c166ba62 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -1043,11 +1043,11 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins if (experimentalFeaturesEnabled.contains( propertyNameToEnvironmentVariableName(LOGS_INJECTION))) { logsInjectionEnabled = - configProvider.getBoolean( - LOGS_INJECTION_ENABLED, DEFAULT_LOGS_INJECTION_ENABLED, LOGS_INJECTION); + configProvider.getBoolean(LOGS_INJECTION_ENABLED, false, LOGS_INJECTION); } else { logsInjectionEnabled = - configProvider.getBoolean(LOGS_INJECTION_ENABLED, true, LOGS_INJECTION); + configProvider.getBoolean( + LOGS_INJECTION_ENABLED, DEFAULT_LOGS_INJECTION_ENABLED, LOGS_INJECTION); } dogStatsDNamedPipe = configProvider.getString(DOGSTATSD_NAMED_PIPE); diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 0247dc8d7b5..36cc4411737 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -1905,7 +1905,7 @@ class ConfigTest extends DDSpecification { config.experimentalFeaturesEnabled == ["DD_LOGS_INJECTION", "DD_TAGS"].toSet() //verify expected behavior enabled under feature flag - config.logsInjectionEnabled == DEFAULT_LOGS_INJECTION_ENABLED + config.logsInjectionEnabled == false config.globalTags == [env: "test", aKey: "aVal bKey:bVal cKey:"] } From 914f47ac1207c008f97ce23c7a2f93934f49fcc1 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 17 Mar 2025 15:53:56 -0400 Subject: [PATCH 16/16] nit pt 2 --- .../test/groovy/datadog/trace/api/ConfigCollectorTest.groovy | 2 +- .../src/test/groovy/datadog/trace/api/ConfigTest.groovy | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy index 02f149da6a9..12a52136eb0 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy @@ -185,7 +185,7 @@ class ConfigCollectorTest extends DDSpecification { "data.streams.enabled" | "false" "trace.tags" | "" "trace.header.tags" | "" - "logs.injection.enabled" | "false" + "logs.injection.enabled" | "true" // defaults to null meaning sample everything but not exactly the same as when explicitly set to 1.0 "trace.sample.rate" | null } diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 36cc4411737..33561f7f675 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -10,7 +10,6 @@ import org.junit.Rule import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_ERROR_STATUSES import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ERROR_STATUSES -import static datadog.trace.api.ConfigDefaults.DEFAULT_LOGS_INJECTION_ENABLED import static datadog.trace.api.ConfigDefaults.DEFAULT_PARTIAL_FLUSH_MIN_SPANS import static datadog.trace.api.ConfigDefaults.DEFAULT_SERVICE_NAME import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL