| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //! FFI Logging configuration
- //!
- //! Provides functions to initialize tracing subscriber for stdout logging.
- use std::sync::Once;
- static INIT: Once = std::sync::Once::new();
- /// Initialize the tracing subscriber for stdout logging.
- ///
- /// This function sets up a tracing subscriber that outputs logs to stdout,
- /// making them visible when using the FFI from other languages.
- ///
- /// Call this function once at application startup, before creating
- /// any wallets. Subsequent calls are safe but have no effect.
- ///
- /// # Arguments
- ///
- /// * `level` - Log level filter (e.g., "debug", "info", "warn", "error", "trace")
- ///
- /// # Example (from Flutter/Dart)
- ///
- /// ```dart
- /// await CdkFfi.initLogging("debug");
- /// // Now all logs will be visible in stdout
- /// final wallet = await MultiMintWallet.create(...);
- /// ```
- #[uniffi::export]
- pub fn init_logging(level: String) {
- INIT.call_once(|| {
- #[cfg(target_os = "android")]
- {
- use android_logger::{Config, FilterBuilder};
- use log::LevelFilter;
- android_logger::init_once(
- Config::default()
- .with_max_level(LevelFilter::Trace)
- .with_tag("cdk")
- .with_format(|f, record| write!(f, "{}", record.args()))
- .with_filter(FilterBuilder::new().parse(&level).build()),
- );
- }
- #[cfg(not(target_os = "android"))]
- {
- use tracing_subscriber::{fmt, EnvFilter};
- let filter = EnvFilter::try_new(&level).unwrap_or_else(|_| EnvFilter::new("info"));
- fmt()
- .with_env_filter(filter)
- .with_target(true)
- .with_ansi(false)
- .init();
- }
- });
- }
- /// Initialize logging with default "info" level
- #[uniffi::export]
- pub fn init_default_logging() {
- init_logging("info".to_string());
- }
|