diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 8daad0520d194..adff1c4afa07a 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -531,6 +531,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "colored" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "comfy-table" version = "5.0.1" @@ -603,14 +612,20 @@ dependencies = [ ] [[package]] -name = "crossbeam-utils" -version = "0.8.17" +name = "crossbeam-channel" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "cfg-if", + "crossbeam-utils", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crossterm" version = "0.27.0" @@ -711,6 +726,7 @@ dependencies = [ "libc", "log", "log-reroute", + "log_nonblock", "minijinja", "neon", "once_cell", @@ -929,6 +945,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", +] + [[package]] name = "digest" version = "0.10.7" @@ -1805,9 +1830,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.169" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" @@ -1849,9 +1874,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "log-reroute" @@ -1864,6 +1889,19 @@ dependencies = [ "once_cell", ] +[[package]] +name = "log_nonblock" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "996472e113c3ffe82a220863dfdd137a74b63995b413c1ea81b5a0d494d829d2" +dependencies = [ + "colored 3.0.0", + "crossbeam-channel", + "libc", + "log", + "time", +] + [[package]] name = "lru" version = "0.13.0" @@ -2051,6 +2089,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.45" @@ -2103,6 +2147,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "object" version = "0.32.1" @@ -2384,6 +2437,12 @@ dependencies = [ "postgres-protocol", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -3072,7 +3131,7 @@ checksum = "b7de33c687404ec3045d4a0d437580455257c0436f858d702f244e7d652f9f07" dependencies = [ "atty", "chrono", - "colored", + "colored 1.9.4", "log", "winapi", ] @@ -3376,6 +3435,39 @@ dependencies = [ "threadpool", ] +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.7.6" diff --git a/packages/cubejs-backend-native/Cargo.toml b/packages/cubejs-backend-native/Cargo.toml index ec59d90f8250e..4d0d7c5180a2e 100644 --- a/packages/cubejs-backend-native/Cargo.toml +++ b/packages/cubejs-backend-native/Cargo.toml @@ -44,6 +44,7 @@ serde_json = "1.0.127" simple_logger = "1.7.0" tokio = { version = "1", features = ["full", "rt"] } uuid = { version = "1", features = ["v4"] } +log_nonblock = { version = "0.1.6", optional = true } [dependencies.neon] version = "=1" @@ -51,7 +52,8 @@ default-features = false features = ["napi-1", "napi-4", "napi-6", "futures"] [features] -default = ["neon-entrypoint"] +default = ["neon-entrypoint", "async-log"] neon-debug = [] neon-entrypoint = [] python = ["pyo3", "pyo3-asyncio"] +async-log = ["log_nonblock"] diff --git a/packages/cubejs-backend-native/src/config.rs b/packages/cubejs-backend-native/src/config.rs index 819b2a284e5b9..ec686a44398f6 100644 --- a/packages/cubejs-backend-native/src/config.rs +++ b/packages/cubejs-backend-native/src/config.rs @@ -47,7 +47,7 @@ impl NodeCubeServices { futures.push(tokio::spawn(async move { if let Err(e) = gateway_server.processing_loop().await { - log::error!("{}", e.to_string()); + log::error!("{}", e); }; Ok(()) diff --git a/packages/cubejs-backend-native/src/node_export.rs b/packages/cubejs-backend-native/src/node_export.rs index 4c9f07c6a898e..2350d6ae0ca10 100644 --- a/packages/cubejs-backend-native/src/node_export.rs +++ b/packages/cubejs-backend-native/src/node_export.rs @@ -30,8 +30,11 @@ use std::sync::Arc; use cubesql::telemetry::LocalReporter; use cubesql::{telemetry::ReportingLogger, CubeError}; +#[cfg(feature = "async-log")] +use log_nonblock::NonBlockingLoggerBuilder; use neon::prelude::*; use neon::result::Throw; +#[cfg(not(feature = "async-log"))] use simple_logger::SimpleLogger; pub(crate) struct SQLInterface { @@ -578,8 +581,23 @@ pub fn setup_logger(mut cx: FunctionContext) -> JsResult { Ok(cx.undefined()) } -pub fn create_logger(log_level: log::Level) -> SimpleLogger { - SimpleLogger::new() +#[cfg(not(feature = "async-log"))] +pub fn create_logger(log_level: log::Level) -> Box { + let logger = SimpleLogger::new() + .with_level(log::Level::Error.to_level_filter()) + .with_module_level("cubesql", log_level.to_level_filter()) + .with_module_level("cube_xmla", log_level.to_level_filter()) + .with_module_level("cube_xmla_engine", log_level.to_level_filter()) + .with_module_level("cubejs_native", log_level.to_level_filter()) + .with_module_level("datafusion", log::Level::Warn.to_level_filter()) + .with_module_level("pg_srv", log::Level::Warn.to_level_filter()); + + Box::new(logger) +} + +#[cfg(feature = "async-log")] +pub fn create_logger(log_level: log::Level) -> Box { + let logger = NonBlockingLoggerBuilder::new() .with_level(log::Level::Error.to_level_filter()) .with_module_level("cubesql", log_level.to_level_filter()) .with_module_level("cube_xmla", log_level.to_level_filter()) @@ -587,6 +605,10 @@ pub fn create_logger(log_level: log::Level) -> SimpleLogger { .with_module_level("cubejs_native", log_level.to_level_filter()) .with_module_level("datafusion", log::Level::Warn.to_level_filter()) .with_module_level("pg_srv", log::Level::Warn.to_level_filter()) + .build() + .unwrap(); + + Box::new(logger) } pub fn setup_local_logger(log_level: log::Level) {