Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to add console layer to tracing subscriber under certain circumstance #268

Closed
jaudiger opened this issue Jan 27, 2022 · 1 comment

Comments

@jaudiger
Copy link

jaudiger commented Jan 27, 2022

Following the discussion began here #265, thanks to @hawkw, I was able to successfully spawn a console layer. After that, I tried to build a more complex tracing subscriber which could be set up depending on a YAML configuration + env vars.

Find below, some extracts of the current code (which currently failed to build):

const TOKIO_CONSOLE_RETENTION_SEC: u64 = 1800;
const TOKIO_CONSOLE_PUBLISH_INTERVAL_SEC: u64 = 4;

macro_rules! tracing_setup_subscriber {
    ($subscriber_registry:expr, $level_layer:expr, $subscriber_layer:expr, $format:expr) => {
        match $format {
            LogFormat::Console => {
                tracing::subscriber::set_global_default(
                    $subscriber_registry
                        .with($level_layer)
                        .with($subscriber_layer),
                )?;
            }
            LogFormat::Json => {
                tracing::subscriber::set_global_default(
                    $subscriber_registry
                        .with($level_layer)
                        .with($subscriber_layer.json().flatten_event(true)),
                )?;
            }
        };
    };
}

macro_rules! setup_subscriber {
    ($level_layer:expr, $subscriber_layer:expr, $format:expr, $console_enable:expr) => {{
        let subscriber_registry = tracing_subscriber::registry();

        if $console_enable {
            // // Set console layer
            let console_layer = console_subscriber::ConsoleLayer::builder()
                .retention(Duration::from_secs(TOKIO_CONSOLE_RETENTION_SEC))
                .publish_interval(Duration::from_secs(TOKIO_CONSOLE_PUBLISH_INTERVAL_SEC))
                .spawn();

            tracing_setup_subscriber!(subscriber_registry.with(console_layer), $level_layer, $subscriber_layer, $format);
        } else {
            tracing_setup_subscriber!(subscriber_registry, $level_layer, $subscriber_layer, $format);
        }
    }};
}

pub struct Trace;

impl Trace {
    async fn setup_subscriber(
        log_configuration: &LogConfiguration,
        metrics_configuration: &MetricsConfiguration,
    ) -> Result<()> {
        let format = LogFormat::from_str(log_configuration.get_format().as_str())?;
        let log_parameters_configuration = match format {
            LogFormat::Console => log_configuration.get_console(),
            LogFormat::Json => log_configuration.get_json(),
        };

        let level = Level::from_str(log_parameters_configuration.get_level())?;

        let (level_layer, level_handle) = reload::Layer::new(LevelFilter::from_level(level));
        *LEVEL_HANDLE.lock().await = Some(level_handle);

        // Set subscriber layer
        let subscriber_layer = tracing_subscriber::fmt::layer()
            .with_file(*log_parameters_configuration.get_file())
            .with_line_number(*log_parameters_configuration.get_line_number())
            .with_thread_names(*log_parameters_configuration.get_thread_names())
            .with_thread_ids(*log_parameters_configuration.get_thread_ids())
            .with_ansi(*log_parameters_configuration.get_ansi());

        if *log_parameters_configuration.get_timer() {
            let timer = UtcTime::new(format_description!(
                "[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]"
            ));

            let subscriber_timer_layer = subscriber_layer.with_timer(timer);

            setup_subscriber!(
                level_layer,
                subscriber_timer_layer,
                format,
                *metrics_configuration.get_export().get_tokio().get_enabled()
            );
        } else {
            let subscriber_timer_layer = subscriber_layer.without_time();

            setup_subscriber!(
                level_layer,
                subscriber_timer_layer,
                format,
                *metrics_configuration.get_export().get_tokio().get_enabled()
            );
        }

        Ok(())
    }
}

The interesting part here is when a remove the code related to console layer the code build:

macro_rules! setup_subscriber {
    ($level_layer:expr, $subscriber_layer:expr, $format:expr, $console_enable:expr) => {{
        let subscriber_registry = tracing_subscriber::registry();

        if $console_enable {
            // // Set console layer
            // let console_layer = console_subscriber::ConsoleLayer::builder()
            //     .retention(Duration::from_secs(TOKIO_CONSOLE_RETENTION_SEC))
            //     .publish_interval(Duration::from_secs(TOKIO_CONSOLE_PUBLISH_INTERVAL_SEC))
            //     .spawn();

            // tracing_setup_subscriber!(subscriber_registry.with(console_layer), $level_layer, $subscriber_layer, $format);
        } else {
            tracing_setup_subscriber!(subscriber_registry, $level_layer, $subscriber_layer, $format);
        }
    }};
}

But with the code, I got those issues:

error[E0277]: the trait bound `tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>: __tracing_subscriber_Layer<Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` is not satisfied
    --> src/application/tracing/trace.rs:179:17
     |
61   |                         .with($level_layer)
     |                          ---- required by a bound introduced by this call
...
179  |                 level_layer,
     |                 ^^^^^^^^^^^ the trait `__tracing_subscriber_Layer<Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` is not implemented for `tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>`
     |
     = help: the following implementations were found:
               <tracing_subscriber::reload::Layer<L, S> as __tracing_subscriber_Layer<S>>
note: required by a bound in `tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt::with`
    --> /home/container/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.7/src/layer/mod.rs:1065:12
     |
1065 |         L: Layer<Self>,
     |            ^^^^^^^^^^^ required by this bound in `tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt::with`

error[E0599]: the method `with` exists for struct `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>`, but its trait bounds were not satisfied
   --> src/application/tracing/trace.rs:62:26
    |
62  |                           .with($subscriber_layer),
    |                            ^^^^ method cannot be called on `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` due to unsatisfied trait bounds
...
178 | /             setup_subscriber!(
179 | |                 level_layer,
180 | |                 subscriber_timer_layer,
181 | |                 format,
182 | |                 *metrics_configuration.get_export().get_tokio().get_enabled()
183 | |             );
    | |_____________- in this macro invocation
    |
   ::: /home/container/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.7/src/layer/layered.rs:23:1
    |
23  |   pub struct Layered<L, I, S = I> {
    |   -------------------------------
    |   |
    |   doesn't satisfy `_: SubscriberExt`
    |   doesn't satisfy `_: tracing::Subscriber`
    |   doesn't satisfy `_: warp::Filter`
    |   doesn't satisfy `_: warp::filter::FilterBase`
    |
    = note: the following trait bounds were not satisfied:
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
    = note: this error originates in the macro `tracing_setup_subscriber` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `with` exists for struct `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>`, but its trait bounds were not satisfied
   --> src/application/tracing/trace.rs:69:26
    |
69  |                           .with($subscriber_layer.json().flatten_event(true)),
    |                            ^^^^ method cannot be called on `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` due to unsatisfied trait bounds
...
178 | /             setup_subscriber!(
179 | |                 level_layer,
180 | |                 subscriber_timer_layer,
181 | |                 format,
182 | |                 *metrics_configuration.get_export().get_tokio().get_enabled()
183 | |             );
    | |_____________- in this macro invocation
    |
   ::: /home/container/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.7/src/layer/layered.rs:23:1
    |
23  |   pub struct Layered<L, I, S = I> {
    |   -------------------------------
    |   |
    |   doesn't satisfy `_: SubscriberExt`
    |   doesn't satisfy `_: tracing::Subscriber`
    |   doesn't satisfy `_: warp::Filter`
    |   doesn't satisfy `_: warp::filter::FilterBase`
    |
    = note: the following trait bounds were not satisfied:
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
    = note: this error originates in the macro `tracing_setup_subscriber` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound `tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>: __tracing_subscriber_Layer<Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` is not satisfied
    --> src/application/tracing/trace.rs:188:17
     |
61   |                         .with($level_layer)
     |                          ---- required by a bound introduced by this call
...
188  |                 level_layer,
     |                 ^^^^^^^^^^^ the trait `__tracing_subscriber_Layer<Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` is not implemented for `tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>`
     |
     = help: the following implementations were found:
               <tracing_subscriber::reload::Layer<L, S> as __tracing_subscriber_Layer<S>>
note: required by a bound in `tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt::with`
    --> /home/container/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.7/src/layer/mod.rs:1065:12
     |
1065 |         L: Layer<Self>,
     |            ^^^^^^^^^^^ required by this bound in `tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt::with`

error[E0599]: the method `with` exists for struct `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>`, but its trait bounds were not satisfied
   --> src/application/tracing/trace.rs:62:26
    |
62  |                           .with($subscriber_layer),
    |                            ^^^^ method cannot be called on `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` due to unsatisfied trait bounds
...
187 | /             setup_subscriber!(
188 | |                 level_layer,
189 | |                 subscriber_timer_layer,
190 | |                 format,
191 | |                 *metrics_configuration.get_export().get_tokio().get_enabled()
192 | |             );
    | |_____________- in this macro invocation
    |
   ::: /home/container/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.7/src/layer/layered.rs:23:1
    |
23  |   pub struct Layered<L, I, S = I> {
    |   -------------------------------
    |   |
    |   doesn't satisfy `_: SubscriberExt`
    |   doesn't satisfy `_: tracing::Subscriber`
    |   doesn't satisfy `_: warp::Filter`
    |   doesn't satisfy `_: warp::filter::FilterBase`
    |
    = note: the following trait bounds were not satisfied:
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
    = note: this error originates in the macro `tracing_setup_subscriber` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0599]: the method `with` exists for struct `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>`, but its trait bounds were not satisfied
   --> src/application/tracing/trace.rs:69:26
    |
69  |                           .with($subscriber_layer.json().flatten_event(true)),
    |                            ^^^^ method cannot be called on `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>` due to unsatisfied trait bounds
...
187 | /             setup_subscriber!(
188 | |                 level_layer,
189 | |                 subscriber_timer_layer,
190 | |                 format,
191 | |                 *metrics_configuration.get_export().get_tokio().get_enabled()
192 | |             );
    | |_____________- in this macro invocation
    |
   ::: /home/container/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-subscriber-0.3.7/src/layer/layered.rs:23:1
    |
23  |   pub struct Layered<L, I, S = I> {
    |   -------------------------------
    |   |
    |   doesn't satisfy `_: SubscriberExt`
    |   doesn't satisfy `_: tracing::Subscriber`
    |   doesn't satisfy `_: warp::Filter`
    |   doesn't satisfy `_: warp::filter::FilterBase`
    |
    = note: the following trait bounds were not satisfied:
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: tracing::Subscriber`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: SubscriberExt`
            `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::filter::FilterBase`
            which is required by `&mut Layered<tracing_subscriber::reload::Layer<tracing::level_filters::LevelFilter, tracing_subscriber::Registry>, Layered<impl __tracing_subscriber_Layer<tracing_subscriber::Registry>, tracing_subscriber::Registry>>: warp::Filter`
    = note: this error originates in the macro `tracing_setup_subscriber` (in Nightly builds, run with -Z macro-backtrace for more info)

Some errors have detailed explanations: E0277, E0599.
For more information about an error, try `rustc --explain E0277`.

One more thing, I'm able to build the code with console layer if I do the following change in setup_subscriber macro:

macro_rules! tracing_setup_subscriber {
    ($subscriber_registry:expr, $level_layer:expr, $subscriber_layer:expr, $format:expr) => {
        match $format {
            LogFormat::Console => {
                tracing::subscriber::set_global_default(
                    $subscriber_registry
                        // .with($level_layer)
                        .with($subscriber_layer),
                )?;
            }
            LogFormat::Json => {
                tracing::subscriber::set_global_default(
                    $subscriber_registry
                        // .with($level_layer)
                        .with($subscriber_layer.json().flatten_event(true)),
                )?;
            }
        };
    };
}

macro_rules! setup_subscriber {
    ($level_layer:expr, $subscriber_layer:expr, $format:expr, $console_enable:expr) => {{
        let subscriber_registry = tracing_subscriber::registry();

        if $console_enable {
            // Set console layer
            let console_layer = console_subscriber::ConsoleLayer::builder()
                .retention(Duration::from_secs(TOKIO_CONSOLE_RETENTION_SEC))
                .publish_interval(Duration::from_secs(TOKIO_CONSOLE_PUBLISH_INTERVAL_SEC))
                .spawn();

            tracing_setup_subscriber!(subscriber_registry.with($level_layer).with(console_layer), $level_layer, $subscriber_layer, $format);
        } else {
            // tracing_setup_subscriber!(subscriber_registry, $level_layer, $subscriber_layer, $format);
        }
    }};
}

Thanks, in advance for your help.

@jaudiger jaudiger changed the title Failed to add console layer Failed to add console layer to tracing subscriber under certain circumstance Jan 27, 2022
@jaudiger
Copy link
Author

jaudiger commented Apr 5, 2022

I'm closing this issue, since the problem was not coming from the console library. This PR tokio-rs/tracing#2026 made the implementation easier on my side.

@jaudiger jaudiger closed this as completed Apr 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant