feat(logging): add DD_TRACE_LOG_LEVEL to control the ddtrace log level#16174
Conversation
|
Performance SLOsComparing candidate add-log-level (abd504a) with baseline main (9fd7359) 📈 Performance Regressions (3 suites)📈 iastaspects - 118/118✅ add_aspectTime: ✅ 103.834µs (SLO: <130.000µs 📉 -20.1%) vs baseline: +2.8% Memory: ✅ 42.939MB (SLO: <43.250MB 🟡 -0.7%) vs baseline: +4.7% ✅ add_inplace_aspectTime: ✅ 101.162µs (SLO: <130.000µs 📉 -22.2%) vs baseline: -0.9% Memory: ✅ 42.959MB (SLO: <43.250MB 🟡 -0.7%) vs baseline: +4.8% ✅ add_inplace_noaspectTime: ✅ 28.360µs (SLO: <40.000µs 📉 -29.1%) vs baseline: +0.2% Memory: ✅ 42.979MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +4.8% ✅ add_noaspectTime: ✅ 48.724µs (SLO: <70.000µs 📉 -30.4%) vs baseline: -1.3% Memory: ✅ 42.880MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.7% ✅ bytearray_aspectTime: ✅ 250.410µs (SLO: <400.000µs 📉 -37.4%) vs baseline: +0.7% Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.5% ✅ bytearray_extend_aspectTime: ✅ 653.008µs (SLO: <800.000µs 📉 -18.4%) vs baseline: +1.3% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.8% ✅ bytearray_extend_noaspectTime: ✅ 264.150µs (SLO: <400.000µs 📉 -34.0%) vs baseline: -0.6% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.4% ✅ bytearray_noaspectTime: ✅ 137.942µs (SLO: <300.000µs 📉 -54.0%) vs baseline: -0.2% Memory: ✅ 42.939MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ bytes_aspectTime: ✅ 218.101µs (SLO: <300.000µs 📉 -27.3%) vs baseline: -0.5% Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.6% ✅ bytes_noaspectTime: ✅ 134.377µs (SLO: <200.000µs 📉 -32.8%) vs baseline: -0.3% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.4% ✅ bytesio_aspectTime: ✅ 3.872ms (SLO: <5.000ms 📉 -22.6%) vs baseline: +1.4% Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.6% ✅ bytesio_noaspectTime: ✅ 314.768µs (SLO: <420.000µs 📉 -25.1%) vs baseline: +0.8% Memory: ✅ 42.959MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ capitalize_aspectTime: ✅ 88.851µs (SLO: <300.000µs 📉 -70.4%) vs baseline: -0.6% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.5% ✅ capitalize_noaspectTime: ✅ 253.912µs (SLO: <300.000µs 📉 -15.4%) vs baseline: +3.6% Memory: ✅ 42.880MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.8% ✅ casefold_aspectTime: ✅ 88.817µs (SLO: <500.000µs 📉 -82.2%) vs baseline: -0.1% Memory: ✅ 42.920MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.6% ✅ casefold_noaspectTime: ✅ 304.008µs (SLO: <500.000µs 📉 -39.2%) vs baseline: +0.8% Memory: ✅ 42.959MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +4.8% ✅ decode_aspectTime: ✅ 87.118µs (SLO: <100.000µs 📉 -12.9%) vs baseline: -0.6% Memory: ✅ 42.821MB (SLO: <43.500MB 🟡 -1.6%) vs baseline: +4.5% ✅ decode_noaspectTime: ✅ 155.264µs (SLO: <210.000µs 📉 -26.1%) vs baseline: +0.2% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.8% ✅ encode_aspectTime: ✅ 85.432µs (SLO: <200.000µs 📉 -57.3%) vs baseline: +0.3% Memory: ✅ 42.821MB (SLO: <43.500MB 🟡 -1.6%) vs baseline: +4.5% ✅ encode_noaspectTime: ✅ 141.820µs (SLO: <200.000µs 📉 -29.1%) vs baseline: -1.0% Memory: ✅ 42.939MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.9% ✅ format_aspectTime: ✅ 14.613ms (SLO: <19.200ms 📉 -23.9%) vs baseline: -0.3% Memory: ✅ 42.959MB (SLO: <43.250MB 🟡 -0.7%) vs baseline: +4.5% ✅ format_map_aspectTime: ✅ 16.431ms (SLO: <21.500ms 📉 -23.6%) vs baseline: -0.3% Memory: ✅ 42.959MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +4.8% ✅ format_map_noaspectTime: ✅ 368.692µs (SLO: <500.000µs 📉 -26.3%) vs baseline: -0.4% Memory: ✅ 42.939MB (SLO: <43.250MB 🟡 -0.7%) vs baseline: +4.9% ✅ format_noaspectTime: ✅ 304.240µs (SLO: <500.000µs 📉 -39.2%) vs baseline: +0.5% Memory: ✅ 42.880MB (SLO: <43.250MB 🟡 -0.9%) vs baseline: +4.9% ✅ index_aspectTime: ✅ 131.101µs (SLO: <300.000µs 📉 -56.3%) vs baseline: +8.0% Memory: ✅ 42.900MB (SLO: <43.250MB 🟡 -0.8%) vs baseline: +4.7% ✅ index_noaspectTime: ✅ 40.565µs (SLO: <300.000µs 📉 -86.5%) vs baseline: +0.8% Memory: ✅ 42.959MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +5.0% ✅ join_aspectTime: ✅ 215.795µs (SLO: <300.000µs 📉 -28.1%) vs baseline: -0.3% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.7% ✅ join_noaspectTime: ✅ 143.294µs (SLO: <300.000µs 📉 -52.2%) vs baseline: +0.8% Memory: ✅ 42.880MB (SLO: <43.250MB 🟡 -0.9%) vs baseline: +4.6% ✅ ljust_aspectTime: ✅ 595.698µs (SLO: <700.000µs 📉 -14.9%) vs baseline: 📈 +18.4% Memory: ✅ 42.920MB (SLO: <43.250MB 🟡 -0.8%) vs baseline: +4.7% ✅ ljust_noaspectTime: ✅ 257.254µs (SLO: <300.000µs 📉 -14.2%) vs baseline: ~same Memory: ✅ 42.861MB (SLO: <43.250MB 🟡 -0.9%) vs baseline: +4.6% ✅ lower_aspectTime: ✅ 290.656µs (SLO: <500.000µs 📉 -41.9%) vs baseline: +0.6% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.3% ✅ lower_noaspectTime: ✅ 232.327µs (SLO: <300.000µs 📉 -22.6%) vs baseline: +1.3% Memory: ✅ 42.939MB (SLO: <43.250MB 🟡 -0.7%) vs baseline: +4.6% ✅ lstrip_aspectTime: ✅ 0.274ms (SLO: <3.000ms 📉 -90.9%) vs baseline: -0.7% Memory: ✅ 42.880MB (SLO: <43.250MB 🟡 -0.9%) vs baseline: +4.4% ✅ lstrip_noaspectTime: ✅ 0.176ms (SLO: <3.000ms 📉 -94.1%) vs baseline: -0.6% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.5% ✅ modulo_aspectTime: ✅ 14.291ms (SLO: <18.750ms 📉 -23.8%) vs baseline: ~same Memory: ✅ 43.096MB (SLO: <43.500MB 🟡 -0.9%) vs baseline: +4.9% ✅ modulo_aspect_for_bytearray_bytearrayTime: ✅ 14.885ms (SLO: <19.350ms 📉 -23.1%) vs baseline: +0.2% Memory: ✅ 43.116MB (SLO: <43.500MB 🟡 -0.9%) vs baseline: +5.2% ✅ modulo_aspect_for_bytesTime: ✅ 14.446ms (SLO: <18.900ms 📉 -23.6%) vs baseline: +0.3% Memory: ✅ 43.136MB (SLO: <43.500MB 🟡 -0.8%) vs baseline: +5.3% ✅ modulo_aspect_for_bytes_bytearrayTime: ✅ 14.654ms (SLO: <19.150ms 📉 -23.5%) vs baseline: ~same Memory: ✅ 43.096MB (SLO: <43.500MB 🟡 -0.9%) vs baseline: +5.3% ✅ modulo_noaspectTime: ✅ 0.356ms (SLO: <3.000ms 📉 -88.1%) vs baseline: -1.2% Memory: ✅ 42.939MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ replace_aspectTime: ✅ 18.443ms (SLO: <24.000ms 📉 -23.2%) vs baseline: +0.3% Memory: ✅ 43.155MB (SLO: <44.000MB 🟡 -1.9%) vs baseline: +5.3% ✅ replace_noaspectTime: ✅ 285.283µs (SLO: <300.000µs -4.9%) vs baseline: +1.3% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.7% ✅ repr_aspectTime: ✅ 315.819µs (SLO: <420.000µs 📉 -24.8%) vs baseline: -0.5% Memory: ✅ 42.880MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.5% ✅ repr_noaspectTime: ✅ 46.707µs (SLO: <90.000µs 📉 -48.1%) vs baseline: -0.2% Memory: ✅ 42.920MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ rstrip_aspectTime: ✅ 389.811µs (SLO: <500.000µs 📉 -22.0%) vs baseline: +0.3% Memory: ✅ 42.998MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +4.9% ✅ rstrip_noaspectTime: ✅ 182.484µs (SLO: <300.000µs 📉 -39.2%) vs baseline: +0.2% Memory: ✅ 42.920MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.8% ✅ slice_aspectTime: ✅ 182.864µs (SLO: <300.000µs 📉 -39.0%) vs baseline: ~same Memory: ✅ 42.920MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.7% ✅ slice_noaspectTime: ✅ 53.758µs (SLO: <90.000µs 📉 -40.3%) vs baseline: -0.3% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.6% ✅ stringio_aspectTime: ✅ 4.451ms (SLO: <5.000ms 📉 -11.0%) vs baseline: 📈 +15.2% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.5% ✅ stringio_noaspectTime: ✅ 343.951µs (SLO: <500.000µs 📉 -31.2%) vs baseline: +0.3% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.6% ✅ strip_aspectTime: ✅ 273.623µs (SLO: <350.000µs 📉 -21.8%) vs baseline: -0.2% Memory: ✅ 42.880MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.5% ✅ strip_noaspectTime: ✅ 175.941µs (SLO: <240.000µs 📉 -26.7%) vs baseline: -0.1% Memory: ✅ 42.880MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.7% ✅ swapcase_aspectTime: ✅ 327.008µs (SLO: <500.000µs 📉 -34.6%) vs baseline: +1.0% Memory: ✅ 42.861MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.6% ✅ swapcase_noaspectTime: ✅ 269.118µs (SLO: <400.000µs 📉 -32.7%) vs baseline: +2.0% Memory: ✅ 42.821MB (SLO: <43.500MB 🟡 -1.6%) vs baseline: +4.3% ✅ title_aspectTime: ✅ 315.948µs (SLO: <500.000µs 📉 -36.8%) vs baseline: +1.2% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.7% ✅ title_noaspectTime: ✅ 254.282µs (SLO: <400.000µs 📉 -36.4%) vs baseline: ~same Memory: ✅ 42.841MB (SLO: <43.500MB 🟡 -1.5%) vs baseline: +4.4% ✅ translate_aspectTime: ✅ 487.334µs (SLO: <700.000µs 📉 -30.4%) vs baseline: +0.4% Memory: ✅ 42.939MB (SLO: <43.500MB 🟡 -1.3%) vs baseline: +4.9% ✅ translate_noaspectTime: ✅ 422.445µs (SLO: <500.000µs 📉 -15.5%) vs baseline: -1.2% Memory: ✅ 42.900MB (SLO: <43.500MB 🟡 -1.4%) vs baseline: +4.6% ✅ upper_aspectTime: ✅ 291.510µs (SLO: <500.000µs 📉 -41.7%) vs baseline: ~same Memory: ✅ 42.979MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +5.0% ✅ upper_noaspectTime: ✅ 228.356µs (SLO: <400.000µs 📉 -42.9%) vs baseline: -0.5% Memory: ✅ 42.959MB (SLO: <43.500MB 🟡 -1.2%) vs baseline: +4.8% 📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 514.923µs (SLO: <700.000µs 📉 -26.4%) vs baseline: 📈 +24.1% Memory: ✅ 42.526MB (SLO: <43.500MB -2.2%) vs baseline: +4.8% ✅ ospathbasename_noaspectTime: ✅ 425.331µs (SLO: <700.000µs 📉 -39.2%) vs baseline: -0.1% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.2% ✅ ospathjoin_aspectTime: ✅ 612.569µs (SLO: <700.000µs 📉 -12.5%) vs baseline: -0.4% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.7% ✅ ospathjoin_noaspectTime: ✅ 617.747µs (SLO: <700.000µs 📉 -11.8%) vs baseline: -0.5% Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.4% ✅ ospathnormcase_aspectTime: ✅ 347.542µs (SLO: <700.000µs 📉 -50.4%) vs baseline: +1.0% Memory: ✅ 42.448MB (SLO: <43.500MB -2.4%) vs baseline: +4.5% ✅ ospathnormcase_noaspectTime: ✅ 350.641µs (SLO: <700.000µs 📉 -49.9%) vs baseline: -0.2% Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1% ✅ ospathsplit_aspectTime: ✅ 480.937µs (SLO: <700.000µs 📉 -31.3%) vs baseline: +0.8% Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +5.0% ✅ ospathsplit_noaspectTime: ✅ 488.193µs (SLO: <700.000µs 📉 -30.3%) vs baseline: +0.1% Memory: ✅ 42.507MB (SLO: <43.500MB -2.3%) vs baseline: +4.8% ✅ ospathsplitdrive_aspectTime: ✅ 371.238µs (SLO: <700.000µs 📉 -47.0%) vs baseline: +0.3% Memory: ✅ 42.507MB (SLO: <43.500MB -2.3%) vs baseline: +4.5% ✅ ospathsplitdrive_noaspectTime: ✅ 73.763µs (SLO: <700.000µs 📉 -89.5%) vs baseline: +0.5% Memory: ✅ 42.526MB (SLO: <43.500MB -2.2%) vs baseline: +4.7% ✅ ospathsplitext_aspectTime: ✅ 460.968µs (SLO: <700.000µs 📉 -34.1%) vs baseline: +1.3% Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +4.3% ✅ ospathsplitext_noaspectTime: ✅ 467.452µs (SLO: <700.000µs 📉 -33.2%) vs baseline: +1.5% Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9% 📈 telemetryaddmetric - 30/30✅ 1-count-metric-1-timesTime: ✅ 3.535µs (SLO: <20.000µs 📉 -82.3%) vs baseline: 📈 +16.9% Memory: ✅ 35.095MB (SLO: <36.000MB -2.5%) vs baseline: +4.6% ✅ 1-count-metrics-100-timesTime: ✅ 199.770µs (SLO: <220.000µs -9.2%) vs baseline: -0.2% Memory: ✅ 35.193MB (SLO: <36.000MB -2.2%) vs baseline: +4.9% ✅ 1-distribution-metric-1-timesTime: ✅ 3.440µs (SLO: <20.000µs 📉 -82.8%) vs baseline: +0.8% Memory: ✅ 35.154MB (SLO: <36.000MB -2.4%) vs baseline: +4.8% ✅ 1-distribution-metrics-100-timesTime: ✅ 217.364µs (SLO: <230.000µs -5.5%) vs baseline: +1.7% Memory: ✅ 35.409MB (SLO: <36.000MB 🟡 -1.6%) vs baseline: +5.3% ✅ 1-gauge-metric-1-timesTime: ✅ 2.245µs (SLO: <20.000µs 📉 -88.8%) vs baseline: +0.8% Memory: ✅ 35.271MB (SLO: <36.000MB -2.0%) vs baseline: +5.1% ✅ 1-gauge-metrics-100-timesTime: ✅ 136.689µs (SLO: <150.000µs -8.9%) vs baseline: +0.2% Memory: ✅ 35.114MB (SLO: <36.000MB -2.5%) vs baseline: +4.4% ✅ 1-rate-metric-1-timesTime: ✅ 3.227µs (SLO: <20.000µs 📉 -83.9%) vs baseline: +1.0% Memory: ✅ 35.527MB (SLO: <36.000MB 🟡 -1.3%) vs baseline: +5.9% ✅ 1-rate-metrics-100-timesTime: ✅ 214.815µs (SLO: <250.000µs 📉 -14.1%) vs baseline: +0.9% Memory: ✅ 35.154MB (SLO: <36.000MB -2.4%) vs baseline: +4.9% ✅ 100-count-metrics-100-timesTime: ✅ 19.958ms (SLO: <22.000ms -9.3%) vs baseline: -0.2% Memory: ✅ 35.134MB (SLO: <36.000MB -2.4%) vs baseline: +5.0% ✅ 100-distribution-metrics-100-timesTime: ✅ 2.255ms (SLO: <2.550ms 📉 -11.5%) vs baseline: ~same Memory: ✅ 35.448MB (SLO: <36.000MB 🟡 -1.5%) vs baseline: +5.9% ✅ 100-gauge-metrics-100-timesTime: ✅ 1.408ms (SLO: <1.550ms -9.1%) vs baseline: +0.3% Memory: ✅ 35.193MB (SLO: <36.000MB -2.2%) vs baseline: +4.9% ✅ 100-rate-metrics-100-timesTime: ✅ 2.192ms (SLO: <2.550ms 📉 -14.0%) vs baseline: +0.4% Memory: ✅ 35.232MB (SLO: <36.000MB -2.1%) vs baseline: +4.8% ✅ flush-1-metricTime: ✅ 4.695µs (SLO: <20.000µs 📉 -76.5%) vs baseline: -0.2% Memory: ✅ 35.507MB (SLO: <36.000MB 🟡 -1.4%) vs baseline: +4.9% ✅ flush-100-metricsTime: ✅ 174.662µs (SLO: <250.000µs 📉 -30.1%) vs baseline: -0.3% Memory: ✅ 35.547MB (SLO: <36.000MB 🟡 -1.3%) vs baseline: +4.8% ✅ flush-1000-metricsTime: ✅ 2.193ms (SLO: <2.500ms 📉 -12.3%) vs baseline: +0.6% Memory: ✅ 36.412MB (SLO: <36.500MB 🟡 -0.2%) vs baseline: +4.8% 🟡 Near SLO Breach (14 suites)🟡 coreapiscenario - 10/10 (1 unstable)
|
Codeowners resolved as |
Co-authored-by: Munir Abdinur <[email protected]>
juanjux
left a comment
There was a problem hiding this comment.
I am surprised we didn't have this before!
@juanjux - @brettlangdon had the wisdom to raise this a while back when I was trying to add logs to a file as an option: #3214 (comment) and I didn't understand why it was needed at the time. Since then we've definitely had more reports showing why an override to the root logger is important to provide. I know @rachelyangdog also spent time thinking about this! :) |
|
Also just adding as an update that given that some logs are using log.critical: https://github.com/search?q=repo%3ADataDog%2Fdd-trace-py%20log.critical&type=code, we may need to revisit looking for a real "off" option in the future. |
## Description <!-- Provide an overview of the change and motivation for the change --> I'm trying to get #16174 merged, but it's failing a test called trace completeness because the new env var didn't get registered: https://github.com/DataDog/dd-trace-py/actions/runs/21412462731/job/61653888559?pr=16174. ``` "(NOT A FLAKE) Read this quick runbook to update allowed configs: https://github.com/DataDog/system-tests/blob/main/docs/edit/runbook.md#test_config_telemetry_completeness" ) E ValueError: (NOT A FLAKE) Read this quick runbook to update allowed configs: https://github.com/DataDog/system-tests/blob/main/docs/edit/runbook.md#test_config_telemetry_completeness tests/test_telemetry.py:771: ValueError ------------------------------ Captured log call ------------------------------- 20:26:33.619 ERROR [ "DD_TRACE_LOG_LEVEL" ] ``` However, I just got the system test PR to pick up this env var merged in: DataDog/system-tests#6117, and since it's still failing, I believe this means I need to update the system tests reference in dd-trace-py. ## Testing <!-- Describe your testing strategy or note what tests are included --> ## Risks <!-- Note any risks associated with this change, or "None" if no risks --> ## Additional Notes <!-- Any other information that would be helpful for reviewers -->
Description
Today, the ddtrace logger follows the root logger.
If the root logger is in DEBUG mode, then ddtrace will also emit logs and the only way to override that is to set something like this: https://docs.datadoghq.com/tracing/troubleshooting/tracer_debug_logs/?tab=python#review-debug-logs
This change introduces a DD_TRACE_LOG_LEVEL setting that follows the logging levels in the logging module: https://docs.python.org/3/library/logging.html#levels .
DD_TRACE_DEBUGwill take precedence if set and set the tracer to debug. However, if DD_TRACE_LOG_LEVEL is used as a standalone, it can control the ddtrace logger setting.Example
DD_TRACE_LOG_LEVEL=CRITICALto only get critical logs instead of everything.In startup logs, I have the setting report as
log_level_overrideto avoid confusion with the debug mode option someone may be trying to set:Addresses APMS-18427
Testing
Added tests that assert on the order of DD_TRACE_DEBUG and DD_TRACE_LOG_LEVEL .
Risks
There really isn't a true "NO LOGS" setting if we follow these logging levels, so if we accept this PR, we need to avoid setting any critical logs unless it's an exceptional use case.
Additional Notes
There have been various changes to how debug mode can be set over the years. Some questions I think will be asked of the reviewers and here's my answer:
Do other tracers have this setting?
Yes.
Java has DD_LOG_LEVEL: Support DD_LOG_LEVEL dd-trace-java#7159
Node.js has DD_TRACE_LOG_LEVEL: Add experimental support for customizing tracer log levels dd-trace-js#727
If DD_TRACE_DEBUG=debug, how is it different than setting DD_TRACE_LOG_LEVEL=debug? Won't they have the same problems?
All DD_TRACE_DEBUG does today is enables debug mode if the user sets it to TRUE:
dd-trace-py/ddtrace/_logger.py
Lines 53 to 54 in c173a8a
Setting it to "FALSE" has no effect if the root logger has already been configured.
DD_TRACE_LOG_LEVEL is different in the sense that it allows us to override the log level setting beyond accepting DEBUG mode or accepting whatever the root logger's level was.