Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion tracing-subscriber/src/filter/env/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,9 @@ impl EnvFilter {
use tracing::level_filters::STATIC_MAX_LEVEL;
use tracing::Level;

let directives: Vec<_> = directives.into_iter().collect();
let fallback_level = Directive::from(crate::fmt::Subscriber::DEFAULT_MAX_LEVEL);

let directives: Vec<_> = std::iter::once(fallback_level).chain(directives.into_iter()).collect();

let disabled: Vec<_> = directives
.iter()
Expand Down
33 changes: 32 additions & 1 deletion tracing-subscriber/src/fmt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ pub mod writer;
pub use fmt_layer::{FmtContext, FormattedFields, Layer};

use crate::layer::Layer as _;
use crate::util::SubscriberInitExt;
use crate::{
filter::LevelFilter,
layer,
Expand Down Expand Up @@ -1131,7 +1132,37 @@ pub fn try_init() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
#[cfg(feature = "env-filter")]
let builder = builder.with_env_filter(crate::EnvFilter::from_default_env());

builder.try_init()
// If `env-filter` is disabled, remove the default max level filter from the
// subscriber; it will be added to the `Targets` filter instead if no filter
// is set in `RUST_LOG`.
// Replacing the default `LevelFilter` with an `EnvFilter` would imply this,
// but we can't replace the builder's filter with a `Targets` filter yet.
#[cfg(not(feature = "env-filter"))]
let builder = builder.with_max_level(LevelFilter::TRACE);

let subscriber = builder.finish();
#[cfg(not(feature = "env-filter"))]
let subscriber = {
use crate::{filter::Targets, layer::SubscriberExt};
use std::{env, str::FromStr};
let targets = match env::var("RUST_LOG") {
Ok(var) => Targets::from_str(&var)
.map_err(|e| {
eprintln!("Ignoring `RUST_LOG={:?}`: {}", var, e);
})
.unwrap_or_default(),
Err(env::VarError::NotPresent) => {
Targets::new().with_default(Subscriber::DEFAULT_MAX_LEVEL)
}
Err(e) => {
eprintln!("Ignoring `RUST_LOG`: {}", e);
Targets::new().with_default(Subscriber::DEFAULT_MAX_LEVEL)
}
};
subscriber.with(targets)
};

subscriber.try_init().map_err(Into::into)
}

/// Install a global tracing subscriber that listens for events and
Expand Down