Skip to content

Panic after reloading layer, combined with .with_filter #1629

Open
@Flowneee

Description

@Flowneee

Bug Report

Version

├── tracing v0.1.29
│   ├── tracing-attributes v0.1.18 (proc-macro)
│   └── tracing-core v0.1.21
└── tracing-subscriber v0.2.25
    ├── tracing v0.1.29 (*)
    ├── tracing-core v0.1.21 (*)
    ├── tracing-log v0.1.2
    │   └── tracing-core v0.1.21 (*)
    └── tracing-serde v0.1.2
        └── tracing-core v0.1.21 (*)

Platform

Linux pc 5.14.2-arch1-2 #1 SMP PREEMPT Thu, 09 Sep 2021 09:42:35 +0000 x86_64 GNU/Linux

Description

When layer, wrapped in reload::Layer, have a filter, set with .with_filter (my_layer.with_filter(my_filter)), it will panic on next call to event! (info! in my case). But if layer built as my_filter.and_then(my_layer), everything works:

use tracing_subscriber::{filter::LevelFilter, fmt, layer::SubscriberExt, reload, Layer};

fn main() {
    // This version works
    // let reloadable_layer_fn = || LevelFilter::TRACE.and_then(fmt::Layer::new());

    // This version doesn't work
    let reloadable_layer_fn = || fmt::Layer::new().with_filter(LevelFilter::TRACE);

    let (layer, handle) = reload::Layer::new(reloadable_layer_fn());
    let subscriber = tracing_subscriber::registry().with(layer);
    tracing::subscriber::set_global_default(subscriber).unwrap();

    tracing::info!("Before reload");

    handle.reload(reloadable_layer_fn()).unwrap();

    // Panics here
    tracing::info!("After reload");
}

I am not sure, whether both implementations of reloadable_layer_fn equal or not, but they both seems work in this case.

I expected: After reload is printed

Instead, this happened: panic on printing After reload

Oct 09 14:59:12.383  INFO tracing_test: Before reload
thread 'main' panicked at 'a `Filtered` layer was used, but it had no `FilterId`; was it registered with the subscriber?', /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/filter/layer_filters.rs:239:9
stack backtrace:
   0: std::panicking::begin_panic
             at /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/library/std/src/panicking.rs:541:12
   1: tracing_subscriber::filter::layer_filters::Filtered<L,F,S>::id
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/filter/layer_filters.rs:239:9
   2: tracing_subscriber::filter::layer_filters::Filtered<L,F,S>::did_enable::{{closure}}
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/filter/layer_filters.rs:248:57
   3: std::thread::local::LocalKey<T>::try_with
             at /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/library/std/src/thread/local.rs:399:16
   4: std::thread::local::LocalKey<T>::with
             at /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/library/std/src/thread/local.rs:375:9
   5: tracing_subscriber::filter::layer_filters::Filtered<L,F,S>::did_enable
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/filter/layer_filters.rs:248:9
   6: <tracing_subscriber::filter::layer_filters::Filtered<L,F,S> as tracing_subscriber::layer::Layer<S>>::on_event
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/filter/layer_filters.rs:349:9
   7: <tracing_subscriber::reload::Layer<L,S> as tracing_subscriber::layer::Layer<S>>::on_event
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/reload.rs:96:9
   8: <tracing_subscriber::layer::layered::Layered<L,S> as tracing_core::subscriber::Subscriber>::event
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.2.25/src/layer/layered.rs:116:9
   9: <alloc::sync::Arc<dyn tracing_core::subscriber::Subscriber+core::marker::Send+core::marker::Sync> as tracing_core::subscriber::Subscriber>::event
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-core-0.1.21/src/subscriber.rs:715:9
  10: tracing_core::dispatcher::Dispatch::event
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-core-0.1.21/src/dispatcher.rs:517:9
  11: tracing_core::event::Event::dispatch::{{closure}}
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-core-0.1.21/src/event.rs:35:13
  12: tracing_core::dispatcher::get_default::{{closure}}
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-core-0.1.21/src/dispatcher.rs:331:24
  13: std::thread::local::LocalKey<T>::try_with
             at /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/library/std/src/thread/local.rs:399:16
  14: tracing_core::dispatcher::get_default
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-core-0.1.21/src/dispatcher.rs:328:5
  15: tracing_core::event::Event::dispatch
             at /home/flowneee/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-core-0.1.21/src/event.rs:34:9
  16: tracing_test::main
             at ./src/main.rs:165:5
  17: core::ops::function::FnOnce::call_once
             at /rustc/c8dfcfe046a7680554bf4eb612bad840e7631c4b/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Metadata

Metadata

Assignees

Labels

crate/subscriberRelated to the `tracing-subscriber` cratekind/bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions