diff --git a/src/main.rs b/src/main.rs index 592256b..67946ea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,20 +1,27 @@ #![allow(non_snake_case)] +#[macro_use] +extern crate cfg_if; + mod domain; mod infrastructure; mod ui; mod utils; use dioxus::prelude::*; - -#[cfg(feature = "desktop")] -use dioxus::desktop::Config; - -use tracing::debug; +use tracing::{debug, error}; use tracing_subscriber::prelude::*; -#[cfg(feature = "web")] -use tracing_web::MakeWebConsoleWriter; +cfg_if! { + if #[cfg(feature = "desktop")] { + use dioxus::desktop::Config; + use std::fs::File; + use time::format_description::well_known::Iso8601; + use tracing_subscriber::fmt::time::UtcTime; + } else if #[cfg(feature = "web")] { + use tracing_web::MakeWebConsoleWriter; + } +} use crate::base::{login, sync_rooms}; use crate::base::{APP_SETTINGS, ROOMS, SESSION}; @@ -99,27 +106,41 @@ fn app() -> Element { } fn main() { - #[cfg(feature = "desktop")] - { - let fmt_layer = tracing_subscriber::fmt::layer() - .with_filter(tracing::level_filters::LevelFilter::DEBUG); - tracing_subscriber::registry().with(fmt_layer).init(); + let mut builder = LaunchBuilder::new(); - let config = Config::new().with_menu(None); - let builder = LaunchBuilder::new().with_cfg(config); - builder.launch(app); + let mut layers = Vec::new(); + + cfg_if! { + if #[cfg(feature = "desktop")] { + let config = Config::new().with_menu(None);; + builder = builder.with_cfg(config); + + let log_file = File::create("/tmp/bg92.log").unwrap(); + let file_layer = tracing_subscriber::fmt::layer() + .with_writer(log_file) + .with_timer(UtcTime::new(Iso8601::DATE_TIME)) + .with_ansi(false) + .with_filter(tracing::level_filters::LevelFilter::WARN) + .boxed(); + layers.push(file_layer); + + let console_layer = tracing_subscriber::fmt::layer() + // .with_filter(tracing::level_filters::LevelFilter::DEBUG); + .with_filter(tracing::level_filters::LevelFilter::WARN) + .boxed(); + layers.push(console_layer); + + } else if #[cfg(feature = "web")] { + let console_layer = tracing_subscriber::fmt::layer() + .with_ansi(false) // Only partially supported across browsers + .without_time() // std::time is not available in browsers, see note below + .with_writer(MakeWebConsoleWriter::new()) // write events to the console + .with_filter(tracing::level_filters::LevelFilter::INFO); + layers.push(console_layer); + } } - #[cfg(feature = "web")] - { - let fmt_layer = tracing_subscriber::fmt::layer() - .with_ansi(false) // Only partially supported across browsers - .without_time() // std::time is not available in browsers, see note below - .with_writer(MakeWebConsoleWriter::new()) // write events to the console - .with_filter(tracing::level_filters::LevelFilter::INFO); - tracing_subscriber::registry().with(fmt_layer).init(); // Install these as subscribers to tracing events + tracing_subscriber::registry().with(layers).init(); - let builder = LaunchBuilder::new(); - builder.launch(app); - } + builder.launch(app); }