Skip to content

Commit

Permalink
Docs: Document log limitations
Browse files Browse the repository at this point in the history
  • Loading branch information
Lorak-mmk committed Feb 2, 2024
1 parent e94f8f9 commit 6cc298f
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 1 deletion.
1 change: 1 addition & 0 deletions docs/.python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.10.13
69 changes: 68 additions & 1 deletion docs/source/logging/logging.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,71 @@ To start this example execute:
RUST_LOG=info cargo run
```

The full [example](https://github.com/scylladb/scylla-rust-driver/tree/main/examples/logging.rs) is available in the `examples` folder
The full [example](https://github.com/scylladb/scylla-rust-driver/tree/main/examples/logging.rs) is available in the `examples` folder

## 'log' compatibility

It may be surprising for some that viewing drivers logs using `log` ecosystem doesn't work out of the box despite `tracing` having a compatiblity layer
behind `log` / `log-always` feature flags.

The problem is that this compatibility using `log` feature (which is recommended for libraries) seems to not work well with `.with_current_subscriber()` / Tokio tasks.
For example, for the following program:
```rust
# extern crate env_logger;
# extern crate log;
# extern crate tokio;
# extern crate tracing;
// main.rs

use tracing::instrument::WithSubscriber;

#[tokio::main]
async fn main() {
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));

log::info!("info log");
tracing::info!("info tracing");

tokio::spawn(
async move {
log::info!("spawned info log");
tracing::info!("spawned info tracing")
}
.with_current_subscriber(),
)
.await
.unwrap();

log::info!("another info log");
tracing::info!("another info tracing");
}

```

```toml
# Cargo.toml

[package]
name = "reproducer"
version = "1.0.0"
edition = "2021"

[dependencies]
env_logger = "0.10"
log = "0.4"
tracing = { version = "0.1.36", features = [ "log" ] }
tokio = { version = "1.27", features = [ "full" ] }
```

the output is:
```
[2024-01-26T00:51:06Z INFO reproducer] info log
[2024-01-26T00:51:06Z INFO reproducer] info tracing
[2024-01-26T00:51:06Z INFO reproducer] spawned info log
[2024-01-26T00:51:06Z INFO reproducer] another info log
```

The other feature, `log-always`, works with the driver - but is not something we want to enable in this library.
We recommend using tracing ecosystem, but if for some reason you need to stick with `log`, you can try
enabling `log-always` feature in `tracing` by adding it to your direct dependencies (`tracing = { version = "0.1", features = [ "log-always" ] }`).
This should enable driver log collection via `log` loggers.
1 change: 1 addition & 0 deletions scylla/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ ntest = "0.9.0"
criterion = "0.4" # Note: v0.5 needs at least rust 1.70.0
tokio = { version = "1.27", features = ["test-util"] }
tracing-subscriber = { version = "0.3.14", features = ["env-filter"] }
env_logger = "0.11"
assert_matches = "1.5.0"
rand_chacha = "0.3.1"
time = "0.3"
Expand Down

0 comments on commit 6cc298f

Please sign in to comment.