Skip to content

Commit 806da59

Browse files
authored
Rollup merge of rust-lang#147613 - dingxiangfei2009:investigate-log, r=jdonszelmann
Make logging filters work again by moving EnvFilter into its own layer `tracing` at the time of writing has a feature (?) in its Filter implementation, so that filters like EnvFilter are consulted for status of a span or event and whether it is marked as interesting for logging. Combining a Filter with another layer through the `with_filter` combinator produces a filtered layer that enables an event unless it is statically determined that the event is uninteresting. However, if the filter is dynamic, because of filtering on span names or field values as an example, events are **always** enabled by design. There is an `event_enabled` predicate on `EnvFilter` implementation but it falls back to default and, thus, the dynamic filters are **unused**. Previously, `RUSTC_LOG=[]` or `RUSTC_LOG=[garbage]` enables all events, even when spans do not match. This patch re-enables span- and field-based filters. With `RUSTC_LOG=[garbage]` one should expect no events are enabled again. This will help with development greatly because we can meaningfully filter internal logs again.
2 parents 7d0a0a3 + 1e382a1 commit 806da59

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

compiler/rustc_log/src/lib.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ use std::io::{self, IsTerminal};
3939

4040
use tracing::dispatcher::SetGlobalDefaultError;
4141
use tracing::{Event, Subscriber};
42+
use tracing_subscriber::Registry;
4243
use tracing_subscriber::filter::{Directive, EnvFilter, LevelFilter};
4344
use tracing_subscriber::fmt::FmtContext;
4445
use tracing_subscriber::fmt::format::{self, FormatEvent, FormatFields};
4546
use tracing_subscriber::layer::SubscriberExt;
46-
use tracing_subscriber::{Layer, Registry};
4747

4848
/// The values of all the environment variables that matter for configuring a logger.
4949
/// Errors are explicitly preserved so that we can share error handling.
@@ -152,18 +152,19 @@ where
152152
}
153153
}
154154

155-
let subscriber = build_subscriber().with(layer.with_filter(filter));
155+
let subscriber = build_subscriber();
156+
// NOTE: It is important to make sure that the filter is applied on the last layer
156157
match cfg.backtrace {
157158
Ok(backtrace_target) => {
158159
let fmt_layer = tracing_subscriber::fmt::layer()
159160
.with_writer(io::stderr)
160161
.without_time()
161162
.event_format(BacktraceFormatter { backtrace_target });
162-
let subscriber = subscriber.with(fmt_layer);
163+
let subscriber = subscriber.with(layer).with(fmt_layer).with(filter);
163164
tracing::subscriber::set_global_default(subscriber)?;
164165
}
165166
Err(_) => {
166-
tracing::subscriber::set_global_default(subscriber)?;
167+
tracing::subscriber::set_global_default(subscriber.with(layer).with(filter))?;
167168
}
168169
};
169170

0 commit comments

Comments
 (0)