Skip to content

Comments

fix(internal): move logging rate limiter to log filter [backport 2.x]#12264

Closed
brettlangdon wants to merge 1 commit into2.xfrom
backport-12243-to-2.x
Closed

fix(internal): move logging rate limiter to log filter [backport 2.x]#12264
brettlangdon wants to merge 1 commit into2.xfrom
backport-12243-to-2.x

Conversation

@brettlangdon
Copy link
Member

Backport 122caa6 from #12243 to 2.x.

PGB-61

Fixes #4856

Improve and fix internal ddtrace.internal.logger.get_logger implementation.

Today we enforce that all internal ddtrace loggers use a customer class implementation of logging.Logger to ensure we can apply custom logic like forwarding internal error logs to telemetry and rate limiting the volume of ddtrace logs allowed.

However, the current implementation requires knowledge and use of internal logging.getLogger details, and it tries to replicate some of the behavior. This has caused us to miss a key lock around a shared resource that was expected.

This change in implementation moves to apply our logic via a log filter instead of a customer logger class.

A filter approach will provide the same logic with a much more simple approach which will be easier to reason and maintain which will avoid the bug/race condition found.

The downside to this approach is that loggers can have multiple filters, and the first filter to determine that a log record should not be logged will prevent the other filters from running. This means if a user applies a log filter to one of our ddtrace.* loggers, then we may miss collecting and forwarding the internal errors to telemetry. Otherwise, if a user filter prevents a log from being logged, then it won't apply towards our rate limit (which is acceptable/correct).

Checklist

  • PR author has checked that all the criteria below are met
  • The PR description includes an overview of the change
  • The PR description articulates the motivation for the change
  • The change includes tests OR the PR description describes a testing strategy
  • The PR description notes risks associated with the change, if any
  • Newly-added code is easy to change
  • The change follows the library release note guidelines
  • The change includes or references documentation updates if necessary
  • Backport labels are set (if applicable)

Reviewer Checklist

  • Reviewer has checked that all the criteria below are met
  • Title is accurate
  • All changes are related to the pull request's stated goal
  • Avoids breaking API changes
  • Testing strategy adequately addresses listed risks
  • Newly-added code is easy to change
  • Release note makes sense to a user of the library
  • If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment
  • Backport labels are set in a manner that is consistent with the release branch maintenance policy

PGB-61

Fixes #4856

Improve and fix internal `ddtrace.internal.logger.get_logger`
implementation.

Today we enforce that all internal `ddtrace` loggers use a customer
class implementation of `logging.Logger` to ensure we can apply custom
logic like forwarding internal error logs to telemetry and rate limiting
the volume of ddtrace logs allowed.

However, the current implementation requires knowledge and use of
internal `logging.getLogger` details, and it tries to replicate some of
the behavior. This has caused us to miss a key lock around a shared
resource that was expected.


This change in implementation moves to apply our logic via a log filter
instead of a customer logger class.

A filter approach will provide the same logic with a much more simple
approach which will be easier to reason and maintain which will avoid
the bug/race condition found.

The downside to this approach is that loggers can have multiple filters,
and the first filter to determine that a log record should not be logged
will prevent the other filters from running. This means if a user
applies a log filter to one of our `ddtrace.*` loggers, then we may miss
collecting and forwarding the internal errors to telemetry. Otherwise,
if a user filter prevents a log from being logged, then it won't apply
towards our rate limit (which is acceptable/correct).

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [ ] Reviewer has checked that all the criteria below are met 
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)

---------

Co-authored-by: Yun Kim <35776586+Yun-Kim@users.noreply.github.com>
Co-authored-by: Nicole Cybul <nicole.cybul@datadoghq.com>
Co-authored-by: Nick Ripley <nick.ripley@datadoghq.com>
Co-authored-by: William Conti <58711692+wconti27@users.noreply.github.com>
Co-authored-by: Christophe Papazian <114495376+christophe-papazian@users.noreply.github.com>
Co-authored-by: Munir Abdinur <munir.abdinur@datadoghq.com>
Co-authored-by: Laplie Anderson <randomanderson@users.noreply.github.com>
@brettlangdon brettlangdon requested review from a team as code owners February 10, 2025 13:19
@brettlangdon brettlangdon requested review from emmettbutler, mabdinur and tabgok and removed request for a team February 10, 2025 13:19
@github-actions
Copy link
Contributor

CODEOWNERS have been resolved as:

releasenotes/notes/fix-internal-logging-init-6058c02b527cdf77.yaml      @DataDog/apm-python
ddtrace/internal/logger.py                                              @DataDog/apm-core-python
tests/tracer/test_logger.py                                             @DataDog/apm-sdk-api-python

@datadog-dd-trace-py-rkomorn
Copy link

Datadog Report

Branch report: backport-12243-to-2.x
Commit report: b663b05
Test service: dd-trace-py

✅ 0 Failed, 130 Passed, 1468 Skipped, 4m 34.24s Total duration (32m 44.83s time saved)

@pr-commenter
Copy link

pr-commenter bot commented Feb 10, 2025

Benchmarks

Benchmark execution time: 2025-02-10 14:05:39

Comparing candidate commit b663b05 in PR branch backport-12243-to-2.x with baseline commit 898e38c in branch 2.x.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 394 metrics, 2 unstable metrics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant