diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java index b81a7170e2f..9b503833fc9 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java @@ -9,6 +9,7 @@ import datadog.trace.api.DDSpanId; import datadog.trace.api.DDTraceId; import datadog.trace.api.naming.SpanNaming; +import datadog.trace.api.telemetry.LogCollector; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -68,6 +69,7 @@ public class JDBCDecorator extends DatabaseClientDecorator { Config.get().isDbMetadataFetchingOnQueryEnabled(); private volatile boolean warnedAboutDBMPropagationMode = false; // to log a warning only once + private volatile boolean loggedInjectionError = false; public static void logMissingQueryInfo(Statement statement) throws SQLException { if (log.isDebugEnabled()) { @@ -298,12 +300,7 @@ public void setAction(AgentSpan span, Connection connection) { span.setTag("_dd.dbm_trace_injected", true); } catch (Throwable e) { - log.debug( - "Failed to set extra DBM data in application_name for trace {}. " - + "To disable this behavior, set trace_prepared_statements to 'false'. " - + "See https://docs.datadoghq.com/database_monitoring/connect_dbm_and_apm/ for more info. {}", - span.getTraceId().toHexString(), - e); + logInjectionErrorOnce("action", e); DECORATE.onError(span, e); } } @@ -358,12 +355,7 @@ public long setContextInfo(Connection connection, DBInfo dbInfo) { throw e; } } catch (Exception e) { - log.debug( - "Failed to set extra DBM data in context info for trace {}. " - + "To disable this behavior, set DBM_PROPAGATION_MODE to 'service' mode. " - + "See https://docs.datadoghq.com/database_monitoring/connect_dbm_and_apm/ for more info.{}", - instrumentationSpan.getTraceId().toHexString(), - e); + logInjectionErrorOnce("context_info", e); DECORATE.onError(instrumentationSpan, e); } finally { instrumentationSpan.finish(); @@ -393,14 +385,7 @@ public void setApplicationName(AgentSpan span, Connection connection) { connection.setClientInfo("ApplicationName", traceContext); } catch (Throwable e) { - if (log.isDebugEnabled()) { - log.debug( - "Failed to set extra DBM data in application_name for trace {}. " - + "To disable this behavior, set trace_prepared_statements to 'false'. " - + "See https://docs.datadoghq.com/database_monitoring/connect_dbm_and_apm/ for more info.{}", - span.getTraceId().toHexString(), - e); - } + logInjectionErrorOnce("application_name", e); DECORATE.onError(span, e); } finally { span.setTag(DBM_TRACE_INJECTED, true); @@ -436,4 +421,18 @@ public boolean shouldInjectSQLComment() { return Config.get().getDbmPropagationMode().equals(DBM_PROPAGATION_MODE_FULL) || Config.get().getDbmPropagationMode().equals(DBM_PROPAGATION_MODE_STATIC); } + + private void logInjectionErrorOnce(String vessel, Throwable t) { + if (!loggedInjectionError) { + loggedInjectionError = true; + log.warn( + LogCollector.EXCLUDE_TELEMETRY, // nothing we can do on our side about this + "Failed to set extra DBM data in {}. " + + "To disable this behavior, set trace_prepared_statements to 'false'. " + + "See https://docs.datadoghq.com/database_monitoring/connect_dbm_and_apm/ for more info. " + + "Will not log again for this kind of error.\n{}", + vessel, + t); + } + } }