diff --git a/Cargo.lock b/Cargo.lock index 0eccd72a9..67397cbb8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3947,6 +3947,7 @@ dependencies = [ "napi", "napi-build", "napi-derive", + "tracing-subscriber", "turso_core", ] diff --git a/bindings/javascript/Cargo.toml b/bindings/javascript/Cargo.toml index 8d367f177..b86cc0811 100644 --- a/bindings/javascript/Cargo.toml +++ b/bindings/javascript/Cargo.toml @@ -14,6 +14,7 @@ crate-type = ["cdylib"] turso_core = { workspace = true } napi = { version = "3.1.3", default-features = false } napi-derive = { version = "3.1.1", default-features = true } +tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } [build-dependencies] napi-build = "2.2.3" diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 9d7316461..1616d6b87 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -4,13 +4,27 @@ use std::cell::{RefCell, RefMut}; use std::num::{NonZero, NonZeroUsize}; use std::rc::Rc; -use std::sync::Arc; +use std::sync::{Arc, OnceLock}; use napi::bindgen_prelude::{JsObjectValue, Null, Object, ToNapiValue}; use napi::{bindgen_prelude::ObjectFinalize, Env, JsValue, Unknown}; use napi_derive::napi; +use tracing_subscriber::fmt::format::FmtSpan; +use tracing_subscriber::EnvFilter; use turso_core::{LimboError, StepResult}; +static TRACING_INIT: OnceLock<()> = OnceLock::new(); + +fn init_tracing() { + TRACING_INIT.get_or_init(|| { + tracing_subscriber::fmt() + .with_thread_ids(true) + .with_span_events(FmtSpan::ACTIVE) + .with_env_filter(EnvFilter::from_default_env()) + .init(); + }); +} + #[derive(Default)] #[napi(object)] pub struct OpenDatabaseOptions { @@ -68,6 +82,8 @@ impl ObjectFinalize for Database { impl Database { #[napi(constructor)] pub fn new(path: String, options: Option) -> napi::Result { + init_tracing(); + let memory = path == ":memory:"; let io: Arc = if memory { Arc::new(turso_core::MemoryIO::new())