Skip to content

Commit 84c195c

Browse files
committed
Relplace log with tracing for ios and android uniffi
1 parent 00c854d commit 84c195c

File tree

5 files changed

+126
-65
lines changed

5 files changed

+126
-65
lines changed

Cargo.lock

Lines changed: 70 additions & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ subtle = ">=2.5.0, <3.0"
7777
syn = ">=2.0.87, <3"
7878
thiserror = ">=1.0.40, <3"
7979
tokio = { version = "1.36.0", features = ["macros"] }
80+
tracing = { version = "0.1.41" }
81+
tracing-subscriber = { version = "0.3.20", features = [
82+
"fmt",
83+
"env-filter",
84+
"tracing-log",
85+
] }
8086
tsify = { version = ">=0.5.5, <0.6", features = [
8187
"js",
8288
], default-features = false }

crates/bitwarden-uniffi/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@ bitwarden-state = { workspace = true, features = ["uniffi"] }
3434
bitwarden-uniffi-error = { workspace = true }
3535
bitwarden-vault = { workspace = true, features = ["uniffi"] }
3636
chrono = { workspace = true, features = ["std"] }
37-
env_logger = "0.11.1"
38-
log = { workspace = true }
3937
thiserror = { workspace = true }
38+
tracing = { workspace = true }
39+
tracing-subscriber = { workspace = true }
4040
uniffi = { workspace = true }
4141
uuid = { workspace = true }
4242

4343
[target.'cfg(target_os = "android")'.dependencies]
44-
android_logger = "0.15"
44+
tracing-android = "0.2.0"
4545

4646
# The use of rustls-platform-verifier requires some extra support to communicate with the Android platform
4747
jni = ">=0.21, <0.22"
4848
libloading = ">=0.8.1, <0.9"
4949
rustls-platform-verifier = "0.6.0"
5050

5151
[target.'cfg(target_os = "ios")'.dependencies]
52-
oslog = "0.2.0"
52+
tracing-oslog = "0.3.0"
5353

5454
[build-dependencies]
5555
uniffi = { workspace = true, features = ["build"] }

crates/bitwarden-uniffi/src/android_support.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::{error::Error, sync::OnceLock};
22

33
use jni::sys::{JavaVM, jint, jsize};
4+
use tracing::{error, info};
45

56
pub static JAVA_VM: OnceLock<jni::JavaVM> = OnceLock::new();
67

@@ -9,7 +10,7 @@ pub static JAVA_VM: OnceLock<jni::JavaVM> = OnceLock::new();
910
#[allow(non_snake_case)]
1011
#[unsafe(no_mangle)]
1112
pub extern "system" fn JNI_OnLoad(vm_ptr: jni::JavaVM, _reserved: *mut std::ffi::c_void) -> jint {
12-
log::info!("JNI_OnLoad initializing");
13+
info!("JNI_OnLoad initializing");
1314
JAVA_VM.get_or_init(|| vm_ptr);
1415
jni::sys::JNI_VERSION_1_6
1516
}
@@ -18,25 +19,25 @@ pub fn init() {
1819
fn init_inner() -> Result<(), Box<dyn Error>> {
1920
let jvm = match JAVA_VM.get() {
2021
Some(jvm) => {
21-
log::info!("JavaVM already initialized");
22+
info!("JavaVM already initialized");
2223
jvm
2324
}
2425
None => {
25-
log::info!("JavaVM not initialized, initializing now");
26+
info!("JavaVM not initialized, initializing now");
2627
let jvm = java_vm()?;
2728
JAVA_VM.get_or_init(|| jvm)
2829
}
2930
};
3031

3132
let mut env = jvm.attach_current_thread_permanently()?;
32-
log::info!("Initializing Android verifier");
33+
info!("Initializing Android verifier");
3334
init_verifier(&mut env)?;
34-
log::info!("SDK Android support initialized");
35+
info!("SDK Android support initialized");
3536
Ok(())
3637
}
3738

38-
if let Err(e) = init_inner() {
39-
log::error!("Failed to initialize Android support: {:#?}", e);
39+
if let Err(error) = init_inner() {
40+
error!(%error, "Failed to initialize Android support");
4041
}
4142
}
4243

crates/bitwarden-uniffi/src/lib.rs

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,21 +112,48 @@ impl Client {
112112
}
113113

114114
fn init_logger() {
115-
#[cfg(not(any(target_os = "android", target_os = "ios")))]
116-
let _ = env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
117-
.try_init();
115+
use tracing_subscriber::{EnvFilter, layer::SubscriberExt as _, util::SubscriberInitExt as _};
116+
117+
// the log level prioritization is determined by:
118+
// 1. if RUST_LOG is detected at runtime
119+
// 2. if RUST_LOG is provided at compile time
120+
// 3. default to INFO
121+
let filter = EnvFilter::builder()
122+
.with_default_directive(
123+
option_env!("RUST_LOG")
124+
.unwrap_or("info")
125+
.parse()
126+
.expect("should provide valid log level at compile time."),
127+
)
128+
.from_env_lossy();
118129

119130
#[cfg(target_os = "ios")]
120-
let _ = oslog::OsLogger::new("com.8bit.bitwarden")
121-
.level_filter(log::LevelFilter::Info)
122-
.init();
131+
{
132+
const TAG: &str = "com.8bit.bitwarden";
133+
134+
tracing_subscriber::registry()
135+
.with(filter)
136+
.with(tracing_oslog::OsLogger::new(TAG, "default"))
137+
.init();
138+
}
123139

124140
#[cfg(target_os = "android")]
125-
android_logger::init_once(
126-
android_logger::Config::default()
127-
.with_tag("com.bitwarden.sdk")
128-
.with_max_level(log::LevelFilter::Info),
129-
);
141+
{
142+
const TAG: &str = "com.bitwarden.sdk";
143+
144+
tracing_subscriber::registry()
145+
.with(filter)
146+
.with(
147+
tracing_android::layer(TAG)
148+
.expect("initialization of android logcat tracing layer"),
149+
)
150+
.init();
151+
}
152+
153+
#[cfg(not(any(target_os = "android", target_os = "ios")))]
154+
{
155+
tracing_subscriber::registry().with(filter).init();
156+
}
130157
}
131158

132159
/// Setup the error converter to ensure conversion errors don't cause panics

0 commit comments

Comments
 (0)