Skip to content

Refactor slog::Drain setup code and fix rate limiting bug#180

Merged
TheJokr merged 1 commit intomainfrom
lblocher/rate-limit-log
Mar 23, 2026
Merged

Refactor slog::Drain setup code and fix rate limiting bug#180
TheJokr merged 1 commit intomainfrom
lblocher/rate-limit-log

Conversation

@TheJokr
Copy link
Copy Markdown
Collaborator

@TheJokr TheJokr commented Mar 23, 2026

  • fix: Apply a single global rate limiter, instead of creating a new one each time set_verbosity is called. (was in apply_filters_to_drain)
  • perf: Skip redact_keys filter evaluation if no redactions are configured.
  • chore: Introduce DrainExt extension trait to make drain layering more readable.
  • chore: Correctly forward slog::Drain helper methods in our drain wrappers.

@TheJokr TheJokr self-assigned this Mar 23, 2026
@TheJokr TheJokr requested a review from fisherdarling March 23, 2026 15:44
- fix: Apply a single global rate limiter, instead of creating a new one
  each time `set_verbosity` is called. (was in `apply_filters_to_drain`)
- perf: Skip `redact_keys` filter evaluation if no redactions are
  configured.
- chore: Introduce `DrainExt` extension trait to make drain layering
  more readable.
- chore: Correctly forward `slog::Drain` helper methods in our drain
  wrappers.
@TheJokr TheJokr force-pushed the lblocher/rate-limit-log branch from a52e566 to ad2bc57 Compare March 23, 2026 15:51
@TheJokr TheJokr merged commit 08ea40a into main Mar 23, 2026
20 checks passed
@TheJokr TheJokr deleted the lblocher/rate-limit-log branch March 23, 2026 16:58
TheJokr added a commit that referenced this pull request Apr 9, 2026
Added:
- The `ratelimit!` utility macro simplifies the setup required for
  rate-limiting a code block into a single macro expression. There is
  also a special `ratelimit=` prefix syntax for log statements
  specifically. (#182)
- The sentry metrics hook added in v5.5 now also supports rate-limiting
  for sentry events. To make use of this feature, call the new
  `foundations::sentry::install_hook_with_settings` setup function.
  (#183)
- The telemetry server implements a `/pprof/symbol` endpoint now, which
  can be used for remote symbolization with pprof-compatible tools.
  (#186)
- `foundations::telemetry::tracing::span_is_sampled()` provides a cheap
  way to check whether the current trace has been sampled. This allows
  skipping expensive tag/log formatting code if the values would be
  discarded anyway. (#187)
- `Secret` (string) and `RawSecret` (bytes) wrappers have been added to
  aid with confidential values in config files. Both types hide their
  contents from Debug/Display calls and require an explicit accessors to
  retrieve the secret. Additionally, they zero their memory when
  dropped. (#188)
- `MaybeExternal` is a new settings type that can load plain data
  (strings, bytes, and secrets) from either inline config or external
  sources (environment variables or file system). (#188)

Improved:
- `serde_yaml` was replaced by the new `serde-saphyr` YAML
  implementation. `serde_yaml` has been unmaintained since 2024. (#181)
- Loggers can now be frozen, meaning any further mutation (such as
  `add_fields!`) will lead to an error. This is useful to catch bugs
  where mutations are applied to the wrong logger instance. (#189)
- The maximum queue size for trace span output can now be limited via
  telemetry settings. The default has been set at 1 million spans.
  Additionally, there are new metrics to observe the queue size, total
  number of spans exported, and how many spans have been dropped. (#190)
- Tracing can now be configured with multiple concurrent output tasks to
  boost span throughput. The tasks now run independently of the
  TelemetryDriver to ensure spans are output throughout the lifetime of
  the process. (#191)

Fixed:
- Log rate limiting now correctly applies across `set_verbosity` calls.
  (#180)

Deprecated:
- `foundations::sentry::install_hook` is deprecated in favor of
  `foundations::sentry::install_hook_with_settings`.
@TheJokr TheJokr mentioned this pull request Apr 9, 2026
TheJokr added a commit that referenced this pull request Apr 9, 2026
Added:
- The `ratelimit!` utility macro simplifies the setup required for
  rate-limiting a code block into a single macro expression. There is
  also a special `ratelimit=` prefix syntax for log statements
  specifically. (#182)
- The sentry metrics hook added in v5.5 now also supports rate-limiting
  for sentry events. To make use of this feature, call the new
  `foundations::sentry::install_hook_with_settings` setup function.
  (#183)
- The telemetry server implements a `/pprof/symbol` endpoint now, which
  can be used for remote symbolization with pprof-compatible tools.
  (#186)
- `foundations::telemetry::tracing::span_is_sampled()` provides a cheap
  way to check whether the current trace has been sampled. This allows
  skipping expensive tag/log formatting code if the values would be
  discarded anyway. (#187)
- `Secret` (string) and `RawSecret` (bytes) wrappers have been added to
  aid with confidential values in config files. Both types hide their
  contents from Debug/Display calls and require an explicit accessors to
  retrieve the secret. Additionally, they zero their memory when
  dropped. (#188)
- `MaybeExternal` is a new settings type that can load plain data
  (strings, bytes, and secrets) from either inline config or external
  sources (environment variables or file system). (#188)

Improved:
- `serde_yaml` was replaced by the new `serde-saphyr` YAML
  implementation. `serde_yaml` has been unmaintained since 2024. (#181)
- Loggers can now be frozen, meaning any further mutation (such as
  `add_fields!`) will lead to an error. This is useful to catch bugs
  where mutations are applied to the wrong logger instance. (#189)
- The maximum queue size for trace span output can now be limited via
  telemetry settings. The default has been set at 1 million spans.
  Additionally, there are new metrics to observe the queue size, total
  number of spans exported, and how many spans have been dropped. (#190)
- Tracing can now be configured with multiple concurrent output tasks to
  boost span throughput. The tasks now run independently of the
  TelemetryDriver to ensure spans are output throughout the lifetime of
  the process. (#191)

Fixed:
- Log rate limiting now correctly applies across `set_verbosity` calls.
  (#180)

Deprecated:
- `foundations::sentry::install_hook` is deprecated in favor of
  `foundations::sentry::install_hook_with_settings`.
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.

2 participants