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

level_for_module level-filtering for modules, not targets #109

Open
daboross opened this issue Apr 15, 2022 · 3 comments
Open

level_for_module level-filtering for modules, not targets #109

daboross opened this issue Apr 15, 2022 · 3 comments

Comments

@daboross
Copy link
Owner

Some producers, such as tracing, don't have useful information in the log target, but do populate the log module: see #85.

While filtering based on target should be the default, could we do a separate filter for the module?

Note: it should be well-documented that this does not in interact with the shortest-first hierarchy of target filtering, and doesn't respect info!(target: "events", "echo")-style targets.

I think we could also improve the docs for level_for by using info!(target:..., ...) as an example to demonstrate the difference between targets and modules.

@cdesch
Copy link

cdesch commented May 29, 2022

@daboross is there a way to get fern to work with tracing in the meantime?

@cdesch
Copy link

cdesch commented May 29, 2022

I get the error Error: SetLoggerError(()) when trying to use fern with tracing:

cj@cj-Z:~/projects/macro_sandbox|main ⇒  RUST_BACKTRACE=full cargo run                             
   Compiling macro_sandbox v0.1.0 (/home/cj/projects/macro_sandbox)
    Finished dev [unoptimized + debuginfo] target(s) in 1.11s
     Running `target/debug/macro_sandbox`
Hello, world!
Error: SetLoggerError(())
cj@cj-Z:~/projects/macro_sandbox|main ⇒  

Here is a repo that reproduces the error.

Is this error related to the targets for module level filtering? I think this might be related to this issue: tokio-rs/tracing#1237 in tracing

@daboross
Copy link
Owner Author

@daboross is there a way to get fern to work with tracing in the meantime?

No, not at the moment. I would say to use Dispatch::filter, but log::Metadata only exposes the target, not the originating module.

We might be able to get a fix in on tracing's side, if the fact that they overwrite the target with their own internal one is a bug, rather than a feature. But I haven't tried to contact them about it.

Is this error related to the targets for module level filtering? I think this might be related to this issue: tokio-rs/tracing#1237 in tracing

This is unrelated - looks like it was solved in discussion with the other issue, though! Agreed with the notgull's comment there - it looks like a conflict for the global logger - there can be only one.

You may be able to get this to work without modifications if you can set up fern to receive only messages from tracing-subscriber? I don't know their API too well, but on ferns side at least, it doesn't need to be the global logger.

If you use let (global_level, log) = dispatch.into_log(); instead of .apply() as the final transformation in fern, you'll get a boxed logger which you can feed log entries to put through into fern. It won't consume logs globally anymore, but if you can then set up tracing-log to be registered globally, and forward log entries from that or tracing-subscriber into the fern logger, then both could co-exist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants