From 21e77105f12f4ff12d6e9ede3e8566b5adc8f77f Mon Sep 17 00:00:00 2001 From: Martin Indra Date: Tue, 9 May 2023 20:44:01 +0200 Subject: [PATCH] de_log: Implement logging to file Fixes #90. --- Cargo.lock | 274 +++++++++++++++++++++++++++++++++++----- Cargo.toml | 12 +- crates/log/Cargo.toml | 24 ++++ crates/log/src/lib.rs | 12 ++ crates/log/src/setup.rs | 42 ++++++ src/main.rs | 76 ++++++----- 6 files changed, 378 insertions(+), 62 deletions(-) create mode 100644 crates/log/Cargo.toml create mode 100644 crates/log/src/lib.rs create mode 100644 crates/log/src/setup.rs diff --git a/Cargo.lock b/Cargo.lock index c102f3c03..1358bd2c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -236,7 +236,7 @@ dependencies = [ "serde_urlencoded", "smallvec", "socket2", - "time", + "time 0.3.20", "url", ] @@ -690,7 +690,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.6.2", "object", "rustc-demangle", ] @@ -1613,6 +1613,21 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "chrono" +version = "0.4.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time 0.1.45", + "wasm-bindgen", + "winapi", +] + [[package]] name = "ciborium" version = "0.2.0" @@ -1799,7 +1814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ "percent-encoding", - "time", + "time 0.3.20", "version_check", ] @@ -2043,6 +2058,50 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "cxx" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.12", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.12", +] + [[package]] name = "d3d12" version = "0.6.0" @@ -2208,6 +2267,7 @@ dependencies = [ "de_index", "de_loader", "de_lobby_client", + "de_log", "de_menu", "de_movement", "de_objects", @@ -2215,6 +2275,7 @@ dependencies = [ "de_signs", "de_spawner", "de_terrain", + "tracing", ] [[package]] @@ -2304,6 +2365,19 @@ dependencies = [ "serde", ] +[[package]] +name = "de_log" +version = "0.1.0-dev" +dependencies = [ + "bevy", + "chrono", + "de_core", + "flate2", + "tracing", + "tracing-appender", + "tracing-subscriber", +] + [[package]] name = "de_map" version = "0.1.0-dev" @@ -2713,12 +2787,12 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -2915,7 +2989,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -3331,6 +3405,30 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +dependencies = [ + "android_system_properties", + "core-foundation-sys 0.8.3", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + [[package]] name = "idna" version = "0.3.0" @@ -3670,6 +3768,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + [[package]] name = "linux-raw-sys" version = "0.3.1" @@ -3818,6 +3925,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.6" @@ -3826,7 +3942,7 @@ checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.45.0", ] @@ -4550,7 +4666,7 @@ dependencies = [ "bitflags", "crc32fast", "flate2", - "miniz_oxide", + "miniz_oxide 0.6.2", ] [[package]] @@ -4984,6 +5100,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + [[package]] name = "sct" version = "0.7.0" @@ -5167,7 +5289,7 @@ dependencies = [ "num-bigint", "num-traits", "thiserror", - "time", + "time 0.3.20", ] [[package]] @@ -5492,6 +5614,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + [[package]] name = "time" version = "0.3.20" @@ -5644,6 +5777,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e" +dependencies = [ + "crossbeam-channel", + "time 0.3.20", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.23" @@ -5678,9 +5822,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers", "nu-ansi-term", @@ -5893,6 +6037,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -6160,7 +6310,7 @@ checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" dependencies = [ "windows-implement", "windows-interface", - "windows-targets", + "windows-targets 0.42.2", ] [[package]] @@ -6169,7 +6319,16 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] @@ -6200,13 +6359,13 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -6215,7 +6374,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", ] [[package]] @@ -6224,13 +6383,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -6239,42 +6413,84 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "winit" version = "0.28.3" diff --git a/Cargo.toml b/Cargo.toml index fbc964d9a..66a2a60de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,7 @@ de_gui.workspace = true de_index.workspace = true de_loader.workspace = true de_lobby_client.workspace = true +de_log.workspace = true de_menu.workspace = true de_movement.workspace = true de_objects.workspace = true @@ -49,6 +50,7 @@ de_terrain.workspace = true # Other bevy.workspace = true +tracing.workspace = true [workspace] members = ["crates/*"] @@ -79,6 +81,7 @@ de_index = { path = "crates/index", version = "0.1.0-dev" } de_loader = { path = "crates/loader", version = "0.1.0-dev" } de_lobby_client = { path = "crates/lobby_client", version = "0.1.0-dev" } de_lobby_model = { path = "crates/lobby_model", version = "0.1.0-dev" } +de_log = { path = "crates/log", version = "0.1.0-dev" } de_map = { path = "crates/map", version = "0.1.0-dev" } de_menu = { path = "crates/menu", version = "0.1.0-dev" } de_movement = { path = "crates/movement", version = "0.1.0-dev" } @@ -99,17 +102,21 @@ async-compat = "0.2.1" async-std = "1.11" async-tar = "0.4.2" bevy = "0.10" +chrono = "0.4.24" clap = { version = "4.0", features = ["derive"] } criterion = "0.4" dirs = "4.0.0" enum-iterator = "1.4.0" enum-map = "2.3.0" +fern = "0.6.2" +flate2 = "1.0.26" futures = "0.3.28" futures-lite = "1.11" glam = "0.23" gltf = "1.0" itertools = "0.10.5" iyes_progress = "0.8.0" +log = "0.4.17" nalgebra = { version = "0.32.2", features = ["convert-glam023"] } nix = "0.26.2" ntest = "0.9.0" @@ -124,7 +131,8 @@ sha3 = "0.10.6" spade = "2.0.0" thiserror = "1.0" tinyvec = { version = "1.6.0", features = ["rustc_1_40", "alloc"] } -tracing = "0.1.37" -tracing-subscriber = "0.3.16" +tracing = "0.1.26" +tracing-appender = "0.2.2" +tracing-subscriber = { version = "0.3.17" } url = { version = "2.3.1", features = ["serde"] } urlencoding = "2.1.2" diff --git a/crates/log/Cargo.toml b/crates/log/Cargo.toml new file mode 100644 index 000000000..2f1760d0c --- /dev/null +++ b/crates/log/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "de_log" +description = "Digital Extinction logging to file." + +version.workspace = true +edition.workspace = true +authors.workspace = true +repository.workspace = true +keywords.workspace = true +homepage.workspace = true +license.workspace = true +categories.workspace = true + +[dependencies] +# DE +de_core.workspace = true + +# Other +bevy.workspace = true +chrono.workspace = true +flate2.workspace = true +tracing-appender.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true diff --git a/crates/log/src/lib.rs b/crates/log/src/lib.rs new file mode 100644 index 000000000..a3677a853 --- /dev/null +++ b/crates/log/src/lib.rs @@ -0,0 +1,12 @@ +mod setup; +use bevy::{app::PluginGroupBuilder, prelude::PluginGroup}; + +use crate::setup::LogPlugin; + +pub struct LogPluginGroup; + +impl PluginGroup for LogPluginGroup { + fn build(self) -> PluginGroupBuilder { + PluginGroupBuilder::start::().add(LogPlugin) + } +} diff --git a/crates/log/src/setup.rs b/crates/log/src/setup.rs new file mode 100644 index 000000000..ed1857c1d --- /dev/null +++ b/crates/log/src/setup.rs @@ -0,0 +1,42 @@ +use std::path::PathBuf; + +use bevy::prelude::*; +use tracing::Level; +use tracing_appender::non_blocking::WorkerGuard; +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::{fmt, EnvFilter}; + +pub(crate) struct LogPlugin; + +/// the handle for the guard (dropping it will disable the log writer) +#[derive(Resource)] +pub(crate) struct CurrentLogHandle { + #[allow(dead_code)] + guard: WorkerGuard, +} + +impl Plugin for LogPlugin { + fn build(&self, app: &mut App) { + // for file name + let dt = chrono::Local::now(); + let path: PathBuf = dt.format("%Y-%m-%d_%H-%M-%S.log").to_string().into(); + + let file_appender = tracing_appender::rolling::never("logs", path); + + let (non_blocking_log_writer, _guard) = tracing_appender::non_blocking(file_appender); + + let collector = tracing_subscriber::registry() + .with( + EnvFilter::builder() + // defaults to INFO if RUST_LOG not set + .with_default_directive(Level::INFO.into()) + .from_env_lossy(), + ) + .with(fmt::layer().with_writer(std::io::stdout)) + .with(fmt::layer().with_writer(non_blocking_log_writer)); + tracing::subscriber::set_global_default(collector) + .expect("Unable to set a global collector"); + + app.insert_resource(CurrentLogHandle { guard: _guard }); + } +} diff --git a/src/main.rs b/src/main.rs index 5b8ac0046..244c12ad6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use bevy::log::LogPlugin; #[cfg(not(target_os = "macos"))] use bevy::window::{CursorGrabMode, PrimaryWindow}; use bevy::{ @@ -16,6 +17,7 @@ use de_gui::GuiPluginGroup; use de_index::IndexPluginGroup; use de_loader::LoaderPluginGroup; use de_lobby_client::LobbyClientPluginGroup; +use de_log::LogPluginGroup; use de_menu::MenuPluginGroup; use de_movement::MovementPluginGroup; use de_objects::ObjectsPluginGroup; @@ -23,49 +25,61 @@ use de_pathing::PathingPluginGroup; use de_signs::SignsPluginGroup; use de_spawner::SpawnerPluginGroup; use de_terrain::TerrainPluginGroup; +use tracing::{span, Level}; const CARGO_PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); const GIT_SHA: &str = env!("GIT_SHA"); fn main() { let mut app = App::new(); - app.insert_resource(Msaa::Sample4) - .add_plugins(DefaultPlugins.set(WindowPlugin { - primary_window: Some(Window { - title: "Digital Extinction".to_string(), - mode: WindowMode::BorderlessFullscreen, - ..Default::default() - }), - ..default() - })) - .add_plugin(LogDiagnosticsPlugin::default()) - .add_plugin(FrameTimeDiagnosticsPlugin::default()) - .add_plugin(GamePlugin) - .add_plugins(ConfigPluginGroup) - .add_plugins(GuiPluginGroup) - .add_plugins(LobbyClientPluginGroup) - .add_plugins(MenuPluginGroup) - .add_plugins(CorePluginGroup) - .add_plugins(ObjectsPluginGroup) - .add_plugins(TerrainPluginGroup) - .add_plugins(LoaderPluginGroup) - .add_plugins(IndexPluginGroup) - .add_plugins(PathingPluginGroup) - .add_plugins(SignsPluginGroup) - .add_plugins(SpawnerPluginGroup) - .add_plugins(MovementPluginGroup) - .add_plugins(ControllerPluginGroup) - .add_plugins(CameraPluginGroup) - .add_plugins(BehaviourPluginGroup) - .add_plugins(CombatPluginGroup) - .add_plugins(ConstructionPluginGroup); + // we want logging as early as possible + app.add_plugins(LogPluginGroup); - // This has to be after LogPlugin is inserted. info!( "Starting Digital Extinction {{ \"Version\": \"{}\", \"GitSha\": \"{}\" }}", CARGO_PKG_VERSION, GIT_SHA ); + { + let span = span!(Level::TRACE, "Startup"); + let _enter = span.enter(); + + app.insert_resource(Msaa::Sample4) + .add_plugins( + DefaultPlugins + .set(WindowPlugin { + primary_window: Some(Window { + title: "Digital Extinction".to_string(), + mode: WindowMode::BorderlessFullscreen, + ..Default::default() + }), + ..default() + }) + .disable::(), + ) + .add_plugin(LogDiagnosticsPlugin::default()) + .add_plugin(FrameTimeDiagnosticsPlugin::default()) + .add_plugin(GamePlugin) + .add_plugins(ConfigPluginGroup) + .add_plugins(GuiPluginGroup) + .add_plugins(LobbyClientPluginGroup) + .add_plugins(MenuPluginGroup) + .add_plugins(CorePluginGroup) + .add_plugins(ObjectsPluginGroup) + .add_plugins(TerrainPluginGroup) + .add_plugins(LoaderPluginGroup) + .add_plugins(IndexPluginGroup) + .add_plugins(PathingPluginGroup) + .add_plugins(SignsPluginGroup) + .add_plugins(SpawnerPluginGroup) + .add_plugins(MovementPluginGroup) + .add_plugins(ControllerPluginGroup) + .add_plugins(CameraPluginGroup) + .add_plugins(BehaviourPluginGroup) + .add_plugins(CombatPluginGroup) + .add_plugins(ConstructionPluginGroup); + } + app.run(); }