Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Using
EnvFilter
with a directive that specifies a span name but does not specify any field values requires using dynamic directives even though all the information necessary to match the directive is known statically from the metadata. This incurs unnecessary runtime costs.Solution
This PR adds a
span
field toStaticDirective
. Directives with span names but no field values are now considered static directives.This PR intentionally does not change the
FromStr
implementation or the capabilities afforded byTargets
(which uses thisFromStr
implementation forStaticDirective
).StaticDirective
is simply an implementation detail that happens to be used by bothEnvFilter
andTargets
. This is admittedly somewhat confusing. It might be better to splitStaticDirective
into separate types - one used byEnvFilter
and another used byTargets
.This PR also makes a minor clarification/standardization by renaming the
in_span
field tospan
. This matches the nomenclature used in the directive syntax in the docs (ie.target[span{field=value}]=level
). I've also reordered the initializer fields to consistently match the declaration order.