pub struct LogPlugin {
pub filter: String,
pub level: Level,
pub custom_layer: fn(_: &mut App) -> Option<Box<dyn Layer<Registry> + Sync + Send>>,
}
Expand description
Adds logging to Apps. This plugin is part of the DefaultPlugins
. Adding
this plugin will setup a collector appropriate to your target platform:
- Using
tracing-subscriber
by default, logging tostdout
. - Using
android_log-sys
on Android, logging to Android logs. - Using
tracing-wasm
in Wasm, logging to the browser console.
You can configure this plugin.
fn main() {
App::new()
.add_plugins(DefaultPlugins.set(LogPlugin {
level: Level::DEBUG,
filter: "wgpu=error,bevy_render=info,bevy_ecs=trace".to_string(),
custom_layer: |_| None,
}))
.run();
}
Log level can also be changed using the RUST_LOG
environment variable.
For example, using RUST_LOG=wgpu=error,bevy_render=info,bevy_ecs=trace cargo run ..
It has the same syntax as the field LogPlugin::filter
, see EnvFilter
.
If you define the RUST_LOG
environment variable, the LogPlugin
settings
will be ignored.
Also, to disable color terminal output (ANSI escape codes), you can
set the environment variable NO_COLOR
to any value. This common
convention is documented at no-color.org.
For example:
fn main() {
std::env::set_var("NO_COLOR", "1");
App::new()
.add_plugins(DefaultPlugins)
.run();
}
If you want to setup your own tracing collector, you should disable this
plugin from DefaultPlugins
:
fn main() {
App::new()
.add_plugins(DefaultPlugins.build().disable::<LogPlugin>())
.run();
}
§Panics
This plugin should not be added multiple times in the same process. This plugin sets up global logging configuration for all Apps in a given process, and rerunning the same initialization multiple times will lead to a panic.
§Performance
Filters applied through this plugin are computed at runtime, which will
have a non-zero impact on performance.
To achieve maximum performance, consider using
compile time filters
provided by the log
crate.
# cargo.toml
[dependencies]
log = { version = "0.4", features = ["max_level_debug", "release_max_level_warn"] }
Fields§
§filter: String
Filters logs using the EnvFilter
format
level: Level
Filters out logs that are “less than” the given level.
This can be further filtered using the filter
setting.
custom_layer: fn(_: &mut App) -> Option<Box<dyn Layer<Registry> + Sync + Send>>
Optionally add an extra Layer
to the tracing subscriber
This function is only called once, when the plugin is built.
Because BoxedLayer
takes a dyn Layer
, Vec<Layer>
is also an acceptable return value.
Access to App
is also provided to allow for communication between the
Subscriber
and the App
.
Please see the examples/log_layers.rs
for a complete example.
Trait Implementations§
source§impl Plugin for LogPlugin
impl Plugin for LogPlugin
source§fn ready(&self, _app: &App) -> bool
fn ready(&self, _app: &App) -> bool
finish
should be called.source§fn finish(&self, _app: &mut App)
fn finish(&self, _app: &mut App)
App
, once all plugins registered are ready. This can
be useful for plugins that depends on another plugin asynchronous setup, like the renderer.source§fn cleanup(&self, _app: &mut App)
fn cleanup(&self, _app: &mut App)
Auto Trait Implementations§
impl Freeze for LogPlugin
impl RefUnwindSafe for LogPlugin
impl Send for LogPlugin
impl Sync for LogPlugin
impl Unpin for LogPlugin
impl UnwindSafe for LogPlugin
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more