bitwarden_wasm_internal/
init.rs

1use tracing::Level;
2use tracing_subscriber::{
3    EnvFilter, fmt::format::Pretty, layer::SubscriberExt as _, util::SubscriberInitExt as _,
4};
5use tracing_web::{MakeWebConsoleWriter, performance_layer};
6use wasm_bindgen::prelude::*;
7
8#[wasm_bindgen]
9pub enum LogLevel {
10    Trace,
11    Debug,
12    Info,
13    Warn,
14    Error,
15}
16
17fn convert_level(level: LogLevel) -> Level {
18    match level {
19        LogLevel::Trace => Level::TRACE,
20        LogLevel::Debug => Level::DEBUG,
21        LogLevel::Info => Level::INFO,
22        LogLevel::Warn => Level::WARN,
23        LogLevel::Error => Level::ERROR,
24    }
25}
26
27#[allow(missing_docs)]
28#[wasm_bindgen]
29pub fn init_sdk(log_level: Option<LogLevel>) {
30    console_error_panic_hook::set_once();
31
32    let log_level = convert_level(log_level.unwrap_or(LogLevel::Info));
33
34    let filter = EnvFilter::builder()
35        .with_default_directive(log_level.into())
36        .from_env_lossy();
37
38    let fmt = tracing_subscriber::fmt::layer()
39        .with_ansi(false) // only partially supported across browsers
40        .without_time() // time is not supported in wasm
41        .with_writer(MakeWebConsoleWriter::new()); // write events to the console
42
43    let perf_layer = performance_layer().with_details_from_fields(Pretty::default());
44
45    tracing_subscriber::registry()
46        .with(perf_layer)
47        .with(filter)
48        .with(fmt)
49        .init();
50}