//! This example illustrates how to add custom log layers in bevy. use bevy::{ log::{ tracing::{self, Subscriber}, tracing_subscriber::Layer, BoxedLayer, }, prelude::*, }; struct CustomLayer; impl Layer for CustomLayer { fn on_event( &self, event: &tracing::Event<'_>, _ctx: bevy::log::tracing_subscriber::layer::Context<'_, S>, ) { println!("Got event!"); println!(" level={}", event.metadata().level()); println!(" target={}", event.metadata().target()); println!(" name={}", event.metadata().name()); } } // We don't need App for this example, as we are just printing log information. // For an example that uses App, see log_layers_ecs. fn custom_layer(_app: &mut App) -> Option { // You can provide multiple layers like this, since Vec is also a layer: Some(Box::new(vec![ bevy::log::tracing_subscriber::fmt::layer() .with_file(true) .boxed(), CustomLayer.boxed(), ])) } fn main() { App::new() .add_plugins(DefaultPlugins.set(bevy::log::LogPlugin { custom_layer, ..default() })) .add_systems(Update, log_system) .run(); } fn log_system() { // here is how you write new logs at each "log level" (in "most important" to // "least important" order) error!("something failed"); warn!("something bad happened that isn't a failure, but thats worth calling out"); info!("helpful information that is worth printing by default"); debug!("helpful for debugging"); trace!("very noisy"); }