bevy
bevy copied to clipboard
Improve tracing layer customization
Objective
- Fixes https://github.com/bevyengine/bevy/issues/12597
The current tracing customization option (the update_subscriber
field) was basically unusable because it provides a dyn Subscriber
and most layers require a Subscriber
that also implements for<'a> LookupSpan<'a, Data=Data<'a>>
, so it was impossible to add a layer on top of the dyn Subscriber
.
This PR provides an alternative way of adding additional tracing layers to the LogPlugin by instead creating an Option<Layer>
.
This is enough for most situations because Option<Layer>
and Vec<Layer>
both implement Layer
.
Solution
- Replace the
update_subscriber
field ofLogPlugin
with acustom_layer
field which is function pointer returning anOption<BoxedLayer>
- Update the examples to showcase that this works:
- with multiple additional layers
- with Layers that were previously problematic, such as
bevy::log::tracing_subscriber::fmt::layer().with_file(true)
(mentioned in the issue)
Note that in the example this results in duplicate logs, since we have our own layer on top of the default fmt_layer
added in the LogPlugin; maybe in the future we might want to provide a single one? Or to let the user customize the default fmt_layer
? I still think this change is an improvement upon the previous solution, which was basically broken.
Changelog
This section is optional. If this was a trivial fix, or has no externally-visible impact, you can delete this section.
- The
LogPlugin
'supdate_subscriber
field has been replaced withcustom_layer
to allow the user to flexibly add atracing::Layer
to the layer stack
Migration Guide
- The
LogPlugin
'supdate_subscriber
field has been replaced withcustom_layer