From b7c1be330acbaed4d99e4fa973eb24ad8e60eea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C6=B0=C6=A1ng=20Ho=C3=A0ng=20Long?= Date: Tue, 19 Nov 2024 22:51:50 +0100 Subject: [PATCH] Use logging instead of `dbg!` (#90) * Replace calls to dbg! with log::debug! + env_logger We can use the RUST_LOG environment variable to control the log level. * Add env_logger as optional dependency * Revert to dbg! for tests * Don't use env_logger for wasm * Change cli logging format --------- Co-authored-by: Jesse Farmer --- Cargo.toml | 3 +++ raphael-cli/Cargo.toml | 3 +++ raphael-cli/src/main.rs | 5 +++++ simulator/Cargo.toml | 3 +-- simulator/tests/adversarial_tests.rs | 1 - solvers/Cargo.toml | 5 +++++ solvers/examples/macro_solver_example.rs | 21 ++++++++++++++++--- solvers/src/finish_solver.rs | 9 +++++--- solvers/src/macro_solver/fast_lower_bound.rs | 2 +- .../pareto_front/effect_pareto_front.rs | 6 +++++- .../pareto_front/quality_pareto_front.rs | 6 +++++- solvers/src/macro_solver/search_queue.rs | 3 ++- solvers/src/macro_solver/solver.rs | 2 +- .../src/quality_upper_bound_solver/solver.rs | 12 +++++------ solvers/src/step_lower_bound_solver/solver.rs | 11 +++++----- solvers/src/utils/mod.rs | 10 ++++----- solvers/src/utils/pareto_front_builder.rs | 3 ++- src/app.rs | 6 ++++-- src/main.rs | 5 +++++ 19 files changed, 83 insertions(+), 33 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e7054cd7..9f6e95e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,9 @@ ron = "0.8" log = "0.4" rust-i18n = "3.1.2" +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +env_logger = "0.11.5" + [target.'cfg(target_arch = "wasm32")'.dependencies] wasm-bindgen-futures = "0.4" console_error_panic_hook = "0.1.7" diff --git a/raphael-cli/Cargo.toml b/raphael-cli/Cargo.toml index fbc27710..668aeb38 100644 --- a/raphael-cli/Cargo.toml +++ b/raphael-cli/Cargo.toml @@ -11,3 +11,6 @@ solvers = { path = "../solvers" } game-data = { path = "../game_data" } clap = { version = "4.4.11", features = ["derive", "wrap_help"] } + +log = "0.4" +env_logger = "0.11.5" diff --git a/raphael-cli/src/main.rs b/raphael-cli/src/main.rs index bba088a1..e6f57c25 100644 --- a/raphael-cli/src/main.rs +++ b/raphael-cli/src/main.rs @@ -53,6 +53,11 @@ struct Args { } fn main() { + env_logger::builder() + .format_timestamp(None) + .format_target(false) + .init(); + let args = Args::parse(); let recipe = RECIPES diff --git a/simulator/Cargo.toml b/simulator/Cargo.toml index 9e8d0aa4..06c08027 100644 --- a/simulator/Cargo.toml +++ b/simulator/Cargo.toml @@ -2,8 +2,6 @@ name = "simulator" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [lib] crate-type = ["rlib"] @@ -14,3 +12,4 @@ rand = "0.8.5" [dependencies] bitfield-struct = "0.8.0" serde = { version = "1.0.203", features = ["derive"] } +log = "0.4" diff --git a/simulator/tests/adversarial_tests.rs b/simulator/tests/adversarial_tests.rs index 4b5ce5d7..53d1d26d 100644 --- a/simulator/tests/adversarial_tests.rs +++ b/simulator/tests/adversarial_tests.rs @@ -1,5 +1,4 @@ use simulator::{Action, ActionMask, Condition, Settings, SimulationState}; - const SETTINGS: Settings = Settings { max_cp: 1000, max_durability: 80, diff --git a/solvers/Cargo.toml b/solvers/Cargo.toml index b22c41e4..2578cbac 100644 --- a/solvers/Cargo.toml +++ b/solvers/Cargo.toml @@ -12,6 +12,11 @@ simulator = { path = "../simulator" } radix-heap = "0.4.2" rustc-hash = "1.1.0" bitfield-struct = "0.8.0" +log = "0.4" +env_logger = { version = "0.11.5", optional = true } + +[features] +env_logger = ["dep:env_logger"] [dev-dependencies] rand = "0.8.5" diff --git a/solvers/examples/macro_solver_example.rs b/solvers/examples/macro_solver_example.rs index d703e716..6e94afb2 100644 --- a/solvers/examples/macro_solver_example.rs +++ b/solvers/examples/macro_solver_example.rs @@ -2,8 +2,17 @@ use simulator::{Action, ActionMask, Settings, SimulationState}; use solvers::MacroSolver; fn main() { - dbg!(std::mem::size_of::()); - dbg!(std::mem::align_of::()); + #[cfg(feature = "env_logger")] + env_logger::builder() + .format_timestamp(None) + .format_target(false) + .init(); + + log::trace!( + "SimulationState - size: {}, align: {}", + std::mem::size_of::(), + std::mem::align_of::() + ); // Ra'Kaznar Lapidary Hammer // 4462 Craftsmanship, 4391 Control @@ -32,5 +41,11 @@ fn main() { .quality; let steps = actions.len(); let duration: i16 = actions.iter().map(|action| action.time_cost()).sum(); - dbg!(quality, steps, duration); + + log::info!( + "Solution - quality: {}, steps: {}, duration: {}", + quality, + steps, + duration + ); } diff --git a/solvers/src/finish_solver.rs b/solvers/src/finish_solver.rs index b3689d10..ab5f89c5 100644 --- a/solvers/src/finish_solver.rs +++ b/solvers/src/finish_solver.rs @@ -53,8 +53,11 @@ pub struct FinishSolver { impl FinishSolver { pub fn new(settings: Settings) -> FinishSolver { - dbg!(std::mem::size_of::()); - dbg!(std::mem::align_of::()); + log::trace!( + "ReducedState (FinishSolver) - size: {}, align: {}", + std::mem::size_of::(), + std::mem::align_of::() + ); FinishSolver { settings, max_progress: HashMap::default(), @@ -105,6 +108,6 @@ impl FinishSolver { impl Drop for FinishSolver { fn drop(&mut self) { - dbg!(self.max_progress.len()); + log::debug!("FinishSolver - states: {}", self.max_progress.len()); } } diff --git a/solvers/src/macro_solver/fast_lower_bound.rs b/solvers/src/macro_solver/fast_lower_bound.rs index f927f113..5f0dad71 100644 --- a/solvers/src/macro_solver/fast_lower_bound.rs +++ b/solvers/src/macro_solver/fast_lower_bound.rs @@ -61,7 +61,7 @@ pub fn fast_lower_bound( } } - dbg!(quality_lower_bound); + log::debug!("Fast quality lower bound: {}", quality_lower_bound); std::cmp::min(settings.max_quality, quality_lower_bound) } diff --git a/solvers/src/macro_solver/pareto_front/effect_pareto_front.rs b/solvers/src/macro_solver/pareto_front/effect_pareto_front.rs index bb5e3d88..160e8db0 100644 --- a/solvers/src/macro_solver/pareto_front/effect_pareto_front.rs +++ b/solvers/src/macro_solver/pareto_front/effect_pareto_front.rs @@ -93,6 +93,10 @@ impl EffectParetoFront { impl Drop for EffectParetoFront { fn drop(&mut self) { let pareto_entries: usize = self.buckets.values().map(|value| value.len()).sum(); - dbg!(self.buckets.len(), pareto_entries); + log::debug!( + "EffectParetoFront - buckets: {}, entries: {}", + self.buckets.len(), + pareto_entries + ); } } diff --git a/solvers/src/macro_solver/pareto_front/quality_pareto_front.rs b/solvers/src/macro_solver/pareto_front/quality_pareto_front.rs index d6a6a40d..97d72d24 100644 --- a/solvers/src/macro_solver/pareto_front/quality_pareto_front.rs +++ b/solvers/src/macro_solver/pareto_front/quality_pareto_front.rs @@ -69,6 +69,10 @@ impl QualityParetoFront { impl Drop for QualityParetoFront { fn drop(&mut self) { let pareto_entries: usize = self.buckets.values().map(|value| value.len()).sum(); - dbg!(self.buckets.len(), pareto_entries); + log::debug!( + "QualityParetoFront - buckets: {}, entries: {}", + self.buckets.len(), + pareto_entries + ); } } diff --git a/solvers/src/macro_solver/search_queue.rs b/solvers/src/macro_solver/search_queue.rs index 7724368f..72072904 100644 --- a/solvers/src/macro_solver/search_queue.rs +++ b/solvers/src/macro_solver/search_queue.rs @@ -84,7 +84,8 @@ impl SearchQueue { } dropped += self.buckets.pop_first().unwrap().1.len(); } - dbg!(self.minimum_score, dropped); + log::debug!("New minimum score: {:?}", score); + log::debug!("Nodes dropped: {}", dropped); } pub fn push( diff --git a/solvers/src/macro_solver/solver.rs b/solvers/src/macro_solver/solver.rs index f8898961..ae1f2b6e 100644 --- a/solvers/src/macro_solver/solver.rs +++ b/solvers/src/macro_solver/solver.rs @@ -194,7 +194,7 @@ impl<'a> MacroSolver<'a> { } if let Some(solution) = solution { - dbg!(&solution.actions); + log::trace!("Solution actions: {:?}", &solution.actions); Some(solution.actions) } else { None diff --git a/solvers/src/quality_upper_bound_solver/solver.rs b/solvers/src/quality_upper_bound_solver/solver.rs index 73bf6f6d..de8fba9d 100644 --- a/solvers/src/quality_upper_bound_solver/solver.rs +++ b/solvers/src/quality_upper_bound_solver/solver.rs @@ -36,8 +36,11 @@ pub struct QualityUpperBoundSolver { impl QualityUpperBoundSolver { pub fn new(settings: Settings, backload_progress: bool, unsound_branch_pruning: bool) -> Self { - dbg!(std::mem::size_of::()); - dbg!(std::mem::align_of::()); + log::trace!( + "ReducedState (QualityUpperBoundSolver) - size: {}, align: {}", + std::mem::size_of::(), + std::mem::align_of::() + ); let initial_state = SimulationState::new(&settings); let mut durability_cost = 100; @@ -235,10 +238,7 @@ mod tests { fn solve(settings: Settings, actions: &[Action]) -> u16 { let state = SimulationState::from_macro(&settings, actions).unwrap(); - let result = - QualityUpperBoundSolver::new(settings, false, false).quality_upper_bound(state); - dbg!(result); - result + QualityUpperBoundSolver::new(settings, false, false).quality_upper_bound(state) } #[test] diff --git a/solvers/src/step_lower_bound_solver/solver.rs b/solvers/src/step_lower_bound_solver/solver.rs index 918af055..a68654d6 100644 --- a/solvers/src/step_lower_bound_solver/solver.rs +++ b/solvers/src/step_lower_bound_solver/solver.rs @@ -32,8 +32,11 @@ impl StepLowerBoundSolver { backload_progress: bool, unsound_branch_pruning: bool, ) -> Self { - dbg!(std::mem::size_of::()); - dbg!(std::mem::align_of::()); + log::trace!( + "ReducedState (StepLowerBoundSolver) - size: {}, align: {}", + std::mem::size_of::(), + std::mem::align_of::() + ); let mut bonus_durability_restore = 0; if settings.is_action_allowed::() { bonus_durability_restore = @@ -216,9 +219,7 @@ mod tests { fn solve(settings: Settings, actions: &[Action]) -> u8 { let state = SimulationState::from_macro(&settings, actions).unwrap(); - let result = StepLowerBoundSolver::new(settings, false, false).step_lower_bound(state); - dbg!(result); - result + StepLowerBoundSolver::new(settings, false, false).step_lower_bound(state) } #[test] diff --git a/solvers/src/utils/mod.rs b/solvers/src/utils/mod.rs index ad946ba9..fd8bfd07 100644 --- a/solvers/src/utils/mod.rs +++ b/solvers/src/utils/mod.rs @@ -19,14 +19,14 @@ impl NamedTimer { impl Drop for NamedTimer { fn drop(&mut self) { - #[cfg(target_arch = "wasm32")] - eprintln!("{}: (timer not available on WASM)", self.name); #[cfg(not(target_arch = "wasm32"))] - eprintln!( - "{}: {} seconds", + log::info!( + "Timer \"{}\" elapsed: {} seconds", self.name, self.timer.elapsed().as_secs_f32() ); + #[cfg(target_arch = "wasm32")] + log::info!("Timer \"{}\" elapsed", self.name); } } @@ -87,6 +87,6 @@ impl Backtracking { impl Drop for Backtracking { fn drop(&mut self) { - dbg!(self.entries.len()); + log::debug!("Backtracking - nodes: {}", self.entries.len()); } } diff --git a/solvers/src/utils/pareto_front_builder.rs b/solvers/src/utils/pareto_front_builder.rs index 239fa091..01336369 100644 --- a/solvers/src/utils/pareto_front_builder.rs +++ b/solvers/src/utils/pareto_front_builder.rs @@ -252,7 +252,8 @@ where U: Copy + std::cmp::Ord + std::default::Default, { fn drop(&mut self) { - dbg!( + log::debug!( + "ParetoFrontBuilder - buffer_size: {}, fronts_generated: {}, storage_size: {}", self.buffer.capacity(), self.fronts_generated, self.storage.len() diff --git a/src/app.rs b/src/app.rs index e9b0a913..5f8756df 100644 --- a/src/app.rs +++ b/src/app.rs @@ -5,6 +5,8 @@ use std::time::Duration; use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use log::debug; + #[cfg(not(target_arch = "wasm32"))] use std::time::Instant; #[cfg(target_arch = "wasm32")] @@ -375,14 +377,14 @@ impl MacroSolverApp { self.solver_progress = progress; } SolverEvent::IntermediateSolution(_) | SolverEvent::FinalSolution(_) => { - dbg!(update); + debug!("Unexpected progress update: {:?}", update); } } } if let Some(update) = self.data_update.solution_update.take() { match update { SolverEvent::Progress(_) => { - dbg!(update); + debug!("Unexpected solution update: {:?}", update); } SolverEvent::IntermediateSolution(actions) => { self.actions = actions; diff --git a/src/main.rs b/src/main.rs index a103b0f0..e1372d79 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,10 @@ #[cfg(not(target_arch = "wasm32"))] fn main() -> eframe::Result<()> { + env_logger::builder() + .format_timestamp(None) + .format_target(false) + .init(); + let native_options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default() .with_inner_size([400.0, 300.0])