From e170c0a99e8f043f6549f7a26efbb646eefee907 Mon Sep 17 00:00:00 2001 From: Ebu Date: Tue, 2 Dec 2025 10:36:07 +0100 Subject: [PATCH] Add panic logging test --- Cargo.lock | 15 +++++++++++++++ Cargo.toml | 1 + ebu-dsp/Cargo.toml | 3 +++ ebu-dsp/src/lib.rs | 40 +++++++++++++++++++++++++++++++++------- src/lib.rs | 2 ++ 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5583b77..80e5b80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -324,7 +324,10 @@ dependencies = [ name = "ebu-dsp" version = "0.1.0" dependencies = [ + "crossbeam", + "log", "nih_plug", + "simplelog", ] [[package]] @@ -336,6 +339,7 @@ dependencies = [ "ebu-dsp", "femtovg", "image", + "log", "nih_plug", "parking_lot", "serde", @@ -940,6 +944,17 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simplelog" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0" +dependencies = [ + "log", + "termcolor", + "time", +] + [[package]] name = "slotmap" version = "1.0.7" diff --git a/Cargo.toml b/Cargo.toml index 5fe4a11..d56926a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ crossbeam = "0.8.4" femtovg = "0.18.1" serde = { version = "1.0.228", features = ["derive"] } image = { version = "0.25.9", default-features = false, features = ["png"] } +log = "0.4.28" [workspace] members = ["ebu-dsp"] diff --git a/ebu-dsp/Cargo.toml b/ebu-dsp/Cargo.toml index 3a71db8..7aaaff9 100644 --- a/ebu-dsp/Cargo.toml +++ b/ebu-dsp/Cargo.toml @@ -5,3 +5,6 @@ edition = "2024" [dependencies] nih_plug = { git = "https://github.com/robbert-vdh/nih-plug", version = "0.0.0", default-features = false } +log = "0.4.28" +simplelog = "0.12.2" +crossbeam = "0.8.4" diff --git a/ebu-dsp/src/lib.rs b/ebu-dsp/src/lib.rs index df0319e..ef54830 100644 --- a/ebu-dsp/src/lib.rs +++ b/ebu-dsp/src/lib.rs @@ -2,26 +2,28 @@ mod amplitude; mod biquad; mod comp; mod decibel; +mod eq; mod freq_split; mod meter; mod ring_buffer; mod smoother; mod traits; -mod eq; use std::{ - fmt::Debug, - ops::Add, - time::Duration, + fmt::Debug, ops::Add, panic, time::Duration }; +pub use amplitude::Amplitude; pub use biquad::{BiquadFilter, BiquadFilterState, FilterMode, Slope}; pub use comp::{Compressor, CompressorState}; -pub use freq_split::{FreqSplitter, FreqSplitterState}; -pub use traits::{FloatFormatter, IntFormatter, Lerp, Processor}; +use crossbeam::atomic::AtomicCell; pub use decibel::Decibel; -pub use amplitude::Amplitude; pub use eq::{Equalizer, EqualizerState}; +pub use freq_split::{FreqSplitter, FreqSplitterState}; +use log::{error, info}; +use nih_plug::{nih_error, util::permit_alloc}; +use simplelog::{CombinedLogger, Config, SimpleLogger, WriteLogger}; +pub use traits::{FloatFormatter, IntFormatter, Lerp, Processor}; pub struct Rect { pub x: T, @@ -196,3 +198,27 @@ pub fn rms(sample_buffer: &RingBuffer, last_rms: f64) -> last_rms.powf(2.0) + (1.0 / N as f64) * (sample_buffer[0].powf(2.0) - sample_buffer[N - 1].powf(2.0)) } + +static LOGGER: AtomicCell>> = AtomicCell::new(None); + +pub fn init() { + permit_alloc(|| { + let log_file = std::fs::File::create("airfreshener.log").unwrap(); + let term_log = SimpleLogger::new(log::LevelFilter::Debug, Config::default()); + let file_log = WriteLogger::new(log::LevelFilter::Debug, Config::default(), log_file); + LOGGER.store(Some(simplelog::CombinedLogger::new(vec![ + term_log, file_log, + ]))); + info!("Log check"); + panic::set_hook(Box::new(|info| { + if let Some(str) = info.payload().downcast_ref::() { + error!("Panic! {str}\n{:?}", info.location()); + nih_error!("Panic! {str}\n{:?}", info.location()); + } + else { + error!("Panic! No info provided.\n{:?}", info.location()); + nih_error!("Panic! No info provided.\n{:?}", info.location()); + } + })); + }); +} diff --git a/src/lib.rs b/src/lib.rs index e312614..af46d3b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -99,6 +99,8 @@ impl Plugin for AirFreshener { buffer_config: &BufferConfig, _context: &mut impl InitContext, ) -> bool { + ebu_dsp::init(); + let sample_rate = SampleRate(buffer_config.sample_rate as f64); for _ in 0.._audio_io_layout .main_input_channels