Skip to content

Commit af687f1

Browse files
Merge init_logging into C layer
1 parent b9c4ecd commit af687f1

File tree

6 files changed

+41
-92
lines changed

6 files changed

+41
-92
lines changed

Cargo.lock

Lines changed: 1 addition & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

c/BUILD

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ rust_static_library(
4545

4646
"@crates//:chrono",
4747
"@crates//:itertools",
48-
"@crates//:env_logger",
4948
"@crates//:tracing",
49+
"@crates//:tracing-subscriber",
5050
],
5151
tags = ["crate-name=typedb_driver_clib"],
5252
)
@@ -71,8 +71,8 @@ rust_shared_library(
7171

7272
"@crates//:chrono",
7373
"@crates//:itertools",
74-
"@crates//:env_logger",
75-
"@crates//:log",
74+
"@crates//:tracing",
75+
"@crates//:tracing-subscriber",
7676
],
7777
tags = ["crate-name=typedb_driver_clib"],
7878
)

c/Cargo.toml

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,14 @@ features = {}
1414

1515
[dependencies]
1616

17-
[dependencies.env_logger]
18-
features = ["auto-color", "color", "default", "humantime", "regex"]
19-
version = "0.10.2"
20-
default-features = false
21-
2217
[dependencies.tracing]
2318
features = ["attributes", "default", "log", "std", "tracing-attributes"]
2419
version = "0.1.41"
2520
default-features = false
2621

27-
[dependencies.log]
28-
features = ["kv", "kv_unstable", "std", "value-bag"]
29-
version = "0.4.27"
22+
[dependencies.tracing-subscriber]
23+
features = ["alloc", "ansi", "default", "env-filter", "fmt", "matchers", "nu-ansi-term", "once_cell", "regex", "registry", "sharded-slab", "smallvec", "std", "thread_local", "tracing", "tracing-log"]
24+
version = "0.3.19"
3025
default-features = false
3126

3227
[dependencies.typedb-driver]

c/src/concept/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
use std::ptr::addr_of_mut;
2121

22-
use itertools::Itertools;
2322
use typedb_driver::{answer::ConceptRow, concept::Concept, BoxPromise, Promise, Result};
2423

2524
use super::{iterator::iterator_try_next, memory::free};

c/src/error.rs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ use std::{
2424
sync::Arc,
2525
};
2626

27-
use env_logger::Env;
2827
use tracing::{debug, warn};
28+
use tracing_subscriber::{fmt as tracing_fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
2929
use typedb_driver::{Error, Result};
3030

3131
use super::memory::{free, release_arc, release_optional, release_string};
@@ -35,12 +35,41 @@ thread_local! {
3535
}
3636

3737
/// Enables logging in the TypeDB driver.
38+
///
39+
/// This function sets up tracing with the following priority:
40+
/// 1. TYPEDB_DRIVER_LOG environment variable (if set). Use TYPEDB_DRIVER_CLIB_LOG to see memory exchanges
41+
/// 2. RUST_LOG environment variable (if set)
42+
/// 3. Default level (INFO)
43+
///
44+
/// The logging is initialized only once using a static flag to prevent
45+
/// multiple initializations in applications that create multiple drivers.
3846
#[no_mangle]
3947
pub extern "C" fn init_logging() {
40-
const ENV_VAR: &str = "TYPEDB_DRIVER_LOG_LEVEL";
41-
if let Err(err) = env_logger::try_init_from_env(Env::new().filter(ENV_VAR)) {
42-
warn!("{err}");
43-
}
48+
use std::sync::Once;
49+
static INIT: Once = Once::new();
50+
INIT.call_once(|| {
51+
let clib_level = if let Ok(typedb_driver_clib_log) = std::env::var("TYPEDB_DRIVER_CLIB_LOG") {
52+
typedb_driver_clib_log
53+
} else {
54+
"info".to_owned()
55+
};
56+
// Try to get log level from TYPEDB_DRIVER_LOG first
57+
let env_filter = if let Ok(typedb_log_level) = std::env::var("TYPEDB_DRIVER_LOG") {
58+
EnvFilter::new(&format!("typedb_driver={},typedb_driver_clib={}", typedb_log_level, clib_level))
59+
} else if let Ok(rust_log) = std::env::var("RUST_LOG") {
60+
// If RUST_LOG is set, use it but scope it to typedb_driver only
61+
EnvFilter::new(&format!("typedb_driver={},typedb_driver_clib={}", rust_log, clib_level))
62+
} else {
63+
EnvFilter::new(&format!("typedb_driver=info,typedb_driver_clib={}", clib_level))
64+
};
65+
66+
// Initialize the tracing subscriber
67+
if let Err(e) =
68+
tracing_subscriber::registry().with(env_filter).with(tracing_fmt::layer().with_target(false)).try_init()
69+
{
70+
eprintln!("Failed to initialize logging: {}", e);
71+
}
72+
});
4473
}
4574

4675
fn ok_record<T>(result: Result<T>) -> Option<T> {

rust/src/driver.rs

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -54,44 +54,6 @@ impl TypeDBDriver {
5454

5555
pub const DEFAULT_ADDRESS: &'static str = "localhost:1729";
5656

57-
/// Initialize logging configuration for the TypeDB driver.
58-
///
59-
/// This function sets up tracing with the following priority:
60-
/// 1. TYPEDB_DRIVER_LOG environment variable (if set). Use TYPEDB_DRIVER_CLIB_LOG to see memory exchanges
61-
/// 1. environment variable (if set)
62-
/// 2. RUST_LOG environment variable (if set)
63-
/// 3. Default level (INFO)
64-
///
65-
/// The logging is initialized only once using a static flag to prevent
66-
/// multiple initializations in applications that create multiple drivers.
67-
pub fn init_logging() {
68-
use std::sync::Once;
69-
static INIT: Once = Once::new();
70-
71-
INIT.call_once(|| {
72-
let clib_level = if let Ok(typedb_driver_clib_log) = std::env::var("TYPEDB_DRIVER_CLIB_LOG") {
73-
typedb_driver_clib_log
74-
} else {
75-
"info".to_owned()
76-
};
77-
// Try to get log level from TYPEDB_DRIVER_LOG first
78-
let env_filter = if let Ok(typedb_log_level) = std::env::var("TYPEDB_DRIVER_LOG") {
79-
EnvFilter::new(&format!("typedb_driver={},typedb_driver_clib={}", typedb_log_level, clib_level))
80-
} else if let Ok(rust_log) = std::env::var("RUST_LOG") {
81-
// If RUST_LOG is set, use it but scope it to typedb_driver only
82-
EnvFilter::new(&format!("typedb_driver={},typedb_driver_clib={}", rust_log, clib_level))
83-
} else {
84-
EnvFilter::new(&format!("typedb_driver=info,typedb_driver_clib={}", clib_level))
85-
};
86-
87-
// Initialize the tracing subscriber
88-
if let Err(e) =
89-
tracing_subscriber::registry().with(env_filter).with(tracing_fmt::layer().with_target(false)).try_init()
90-
{
91-
eprintln!("Failed to initialize logging: {}", e);
92-
}
93-
});
94-
}
9557

9658
/// Creates a new TypeDB Server connection.
9759
///
@@ -153,8 +115,6 @@ impl TypeDBDriver {
153115
driver_options: DriverOptions,
154116
driver_lang: impl AsRef<str>,
155117
) -> Result<Self> {
156-
Self::init_logging();
157-
158118
debug!("Initializing TypeDB driver with description: {}", driver_lang.as_ref());
159119
let id = address.as_ref().to_string();
160120
let address: Address = id.parse()?;

0 commit comments

Comments
 (0)