diff options
| author | Emīls <emils@mullvad.net> | 2026-01-09 15:31:26 +0100 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2026-01-09 16:09:52 +0100 |
| commit | aba1b9e8e7dd1bb4925607375cb3d6d369258a92 (patch) | |
| tree | 8e062868cdacfc5597531c4ed5169a48242fe7bb | |
| parent | 63b8b33e5ec507ee821e8f7a86a1d0a47acfe590 (diff) | |
| download | mullvadvpn-ios-enable-rust-logging.tar.xz mullvadvpn-ios-enable-rust-logging.zip | |
Maybe an improvementios-enable-rust-logging
| -rw-r--r-- | Cargo.lock | 3 | ||||
| -rw-r--r-- | mullvad-daemon/src/logging.rs | 19 | ||||
| -rw-r--r-- | mullvad-ios/Cargo.toml | 1 | ||||
| -rw-r--r-- | mullvad-ios/src/logging.rs | 17 | ||||
| -rw-r--r-- | mullvad-logging/Cargo.toml | 2 | ||||
| -rw-r--r-- | mullvad-logging/src/lib.rs | 22 |
6 files changed, 35 insertions, 29 deletions
diff --git a/Cargo.lock b/Cargo.lock index 640fcafcd1..19482655df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2970,6 +2970,7 @@ dependencies = [ "tokio", "tonic", "tower", + "tracing-subscriber", "tunnel-obfuscation", ] @@ -3012,7 +3013,7 @@ dependencies = [ name = "mullvad-logging" version = "0.0.0" dependencies = [ - "log", + "tracing-subscriber", ] [[package]] diff --git a/mullvad-daemon/src/logging.rs b/mullvad-daemon/src/logging.rs index b762d63826..b76bcaeba7 100644 --- a/mullvad-daemon/src/logging.rs +++ b/mullvad-daemon/src/logging.rs @@ -1,4 +1,7 @@ -use mullvad_logging::{SILENCED_CRATES, SLIGHTLY_SILENCED_CRATES, WARNING_SILENCED_CRATES}; +use mullvad_logging::{ + LevelFilter, SILENCED_CRATES, SLIGHTLY_SILENCED_CRATES, WARNING_SILENCED_CRATES, + one_level_quieter, +}; use std::{ io, path::PathBuf, @@ -8,7 +11,6 @@ use talpid_core::logging::rotate_log; use tracing_appender::non_blocking; use tracing_subscriber::{ EnvFilter, Registry, - filter::LevelFilter, fmt::{MakeWriter, format::FmtSpan, writer::OptionalWriter}, layer::SubscriberExt, reload::Handle, @@ -231,16 +233,3 @@ fn silence_crates(mut env_filter: EnvFilter) -> EnvFilter { } env_filter } - -/// Returns a level filter one level quieter than the input. -/// Note: This uses `tracing_subscriber::filter::LevelFilter`, not `log::LevelFilter`. -fn one_level_quieter(level: LevelFilter) -> LevelFilter { - match level { - LevelFilter::OFF => LevelFilter::OFF, - LevelFilter::ERROR => LevelFilter::OFF, - LevelFilter::WARN => LevelFilter::ERROR, - LevelFilter::INFO => LevelFilter::WARN, - LevelFilter::DEBUG => LevelFilter::INFO, - LevelFilter::TRACE => LevelFilter::DEBUG, - } -} diff --git a/mullvad-ios/Cargo.toml b/mullvad-ios/Cargo.toml index 6145a70bf8..7c5b3d4588 100644 --- a/mullvad-ios/Cargo.toml +++ b/mullvad-ios/Cargo.toml @@ -20,6 +20,7 @@ libc = "0.2" log = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } tonic = { workspace = true } +tracing-subscriber = { workspace = true } hyper = { version = "1.4.1", features = ["client", "http1"] } hyper-util = { workspace = true } tower = { workspace = true } diff --git a/mullvad-ios/src/logging.rs b/mullvad-ios/src/logging.rs index 5384d5db9f..0ce8da719f 100644 --- a/mullvad-ios/src/logging.rs +++ b/mullvad-ios/src/logging.rs @@ -3,6 +3,7 @@ //! This module provides a global logger that calls a Swift callback for each log message, //! allowing Rust logs to be captured by Swift's logging infrastructure. +use mullvad_logging::LevelFilter; use std::ffi::CString; use std::sync::OnceLock; @@ -15,7 +16,7 @@ pub type LogCallback = extern "C" fn(level: u8, message: *const libc::c_char); static LOG_CALLBACK: OnceLock<LogCallback> = OnceLock::new(); /// Default log level -const DEFAULT_LOG_LEVEL: log::LevelFilter = log::LevelFilter::Debug; +const DEFAULT_LOG_LEVEL: LevelFilter = LevelFilter::DEBUG; /// Custom logger that forwards to Swift struct SwiftLogger; @@ -28,7 +29,7 @@ impl log::Log for SwiftLogger { let max_level = mullvad_logging::get_log_level_for_target(metadata.target(), DEFAULT_LOG_LEVEL); - metadata.level() <= max_level + metadata.level() <= to_log_level_filter(max_level) } fn log(&self, record: &log::Record<'_>) { @@ -58,6 +59,18 @@ impl log::Log for SwiftLogger { static SWIFT_LOGGER: SwiftLogger = SwiftLogger; +/// Convert from `tracing_subscriber::filter::LevelFilter` to `log::LevelFilter`. +fn to_log_level_filter(level: LevelFilter) -> log::LevelFilter { + match level { + LevelFilter::OFF => log::LevelFilter::Off, + LevelFilter::ERROR => log::LevelFilter::Error, + LevelFilter::WARN => log::LevelFilter::Warn, + LevelFilter::INFO => log::LevelFilter::Info, + LevelFilter::DEBUG => log::LevelFilter::Debug, + LevelFilter::TRACE => log::LevelFilter::Trace, + } +} + /// Initialize the Rust logger with a Swift callback. /// /// This function should be called once early in the application lifecycle, diff --git a/mullvad-logging/Cargo.toml b/mullvad-logging/Cargo.toml index ff916abe05..4b20be1ab7 100644 --- a/mullvad-logging/Cargo.toml +++ b/mullvad-logging/Cargo.toml @@ -9,7 +9,7 @@ edition.workspace = true rust-version.workspace = true [dependencies] -log = { workspace = true } +tracing-subscriber = { workspace = true } [lints] workspace = true diff --git a/mullvad-logging/src/lib.rs b/mullvad-logging/src/lib.rs index 01f583fae0..a971a68333 100644 --- a/mullvad-logging/src/lib.rs +++ b/mullvad-logging/src/lib.rs @@ -3,6 +3,8 @@ //! This crate provides common log filtering configuration used across //! mullvad-daemon, mullvad-ios, and other Mullvad components. +pub use tracing_subscriber::filter::LevelFilter; + /// Crates where only Error level logs are shown (Warn and below are silenced) pub const WARNING_SILENCED_CRATES: &[&str] = &["netlink_proto", "quinn_udp"]; @@ -41,16 +43,16 @@ pub const SLIGHTLY_SILENCED_CRATES: &[&str] = &["nftnl", "udp_over_tcp"]; /// /// This checks the target against the silenced crate lists and returns /// the appropriate maximum log level. -pub fn get_log_level_for_target(target: &str, default_level: log::LevelFilter) -> log::LevelFilter { +pub fn get_log_level_for_target(target: &str, default_level: LevelFilter) -> LevelFilter { for silenced in WARNING_SILENCED_CRATES { if target.starts_with(silenced) { - return log::LevelFilter::Error; + return LevelFilter::ERROR; } } for silenced in SILENCED_CRATES { if target.starts_with(silenced) { - return log::LevelFilter::Warn; + return LevelFilter::WARN; } } @@ -64,13 +66,13 @@ pub fn get_log_level_for_target(target: &str, default_level: log::LevelFilter) - } /// Returns a log level that is one level quieter than the input level. -pub fn one_level_quieter(level: log::LevelFilter) -> log::LevelFilter { +pub fn one_level_quieter(level: LevelFilter) -> LevelFilter { match level { - log::LevelFilter::Off => log::LevelFilter::Off, - log::LevelFilter::Error => log::LevelFilter::Off, - log::LevelFilter::Warn => log::LevelFilter::Error, - log::LevelFilter::Info => log::LevelFilter::Warn, - log::LevelFilter::Debug => log::LevelFilter::Info, - log::LevelFilter::Trace => log::LevelFilter::Debug, + LevelFilter::OFF => LevelFilter::OFF, + LevelFilter::ERROR => LevelFilter::OFF, + LevelFilter::WARN => LevelFilter::ERROR, + LevelFilter::INFO => LevelFilter::WARN, + LevelFilter::DEBUG => LevelFilter::INFO, + LevelFilter::TRACE => LevelFilter::DEBUG, } } |
