Comments (7)
I believe incorporating this feature could be beneficial for debugging and should integrate well with minitrace. However, a question arises: isn't this feature sufficiently general to warrant its own crate? For instance, we can recursively annotate an entire module using log_derive
, can't we? Consequently, minitrace could potentially leverage this capability at no additional effort!
from minitrace-rust.
Just recording reasoning around hierarchy/precedence, more likely to arise when tracing a mod
:
#[trace("a", recurse=all)]
pub fn outer() {
defined_later();
defined_later_too();
#trace["b", recurse=false]
fn defined_later_too() {
println!("I'm traced with 'b' options/settings"):
fn defined_lastish(){
println!("I'm traced with 'a' options/settings"):
}
}
fn defined_later() {
println!("I'm traced with 'a' options/settings too"):
}
}
from minitrace-rust.
Also, with #[trace("a", recurse=all)]
the "a"
becomes a prefix added to child trace names, which default to the function name, so names in the above are:
a_outer
b_defined_later_too
a_defined_last
a_defined_later
When using #[trace(recurse=all|private|public)]
, names would be:
outer
defined_later_too
outer_defined_lastish
outer_defined_later
from minitrace-rust.
Whenever this is implemented... we will need to explicitly document that when recurse=all|private|public
then nested #[trace(...)]
settings are not cumulative.
Specifically, for example:
#[trace(recurse=all, option_a="some")]
fn f() {
#[trace(option_b="thing")]
fn g(){
fn x() {
// not traced
}
}
fn h(){
fn y(){
// is traced
}
}
}
is not equivalent to the second macro being#[trace(option_a="some", option_b="thing")]
.
In this case:
h
andy
would be traced with settings#[trace(recurse=all, option_a="some")]
g
is traced with settings#[trace(option_b="thing")]
x
is not traced.
from minitrace-rust.
I feel uncomfortable adding implicit tracing because:
- tracing has significant overhead, even though minitrace has minimized it as much as possible.
- most functions have no value to be traced
What's the scenario is recurse
for?
from minitrace-rust.
What's the scenario is recurse for?
Pure convenience when debugging the scenario is you have a bug of unknown provenance in a non-trivial async
context. Without such a switch to 'inject' tracing in chunks (per module) or globally, the only alternative is the time consuming and painful process of manually adding them until you discover the root cause.
Not for prod or even dev - unless of course you're disciplined and place all you traceable functions in a single module.
Ack the costs of tracing. As always - Caveat emptor.
from minitrace-rust.
Closing it for now since it's not entirely related to minitrace.
from minitrace-rust.
Related Issues (20)
- Request: panic instead of noop HOT 2
- Automatically create a root span if none is present. HOT 1
- is it possible to create multiple instances of the collector? HOT 10
- WASM (`wasm32-unknown-unknown`) support? HOT 12
- `minitrace-opentelemetry` doesn't work with `opentelemetry_zipkin` exporter HOT 3
- Feature request: Span property on #[trace] macro HOT 6
- Feature request: allow to use minitrace without global collector
- Panic on wasm: time not implemented on this platform HOT 5
- `Reporter::report` should be `async fn`? 🤔 HOT 4
- RFC: tokio-tracing compatible layer HOT 6
- Profile-Guided Optimization (PGO) benchmark results
- `LocalSpan::enter_with_parent` missing? HOT 9
- `futures::Stream` and `futures::Sink` instrumentation HOT 7
- Add span tags dynamically
- WASM target support improvements HOT 5
- [BUG] LocalSpan is broken in quick functions HOT 4
- loose strict dependency version for `opentelemetry` HOT 1
- Making `futures` an optional dependency HOT 1
- Why Reporter::report gets passed a reference instead of a Vec of owned objects? HOT 1
- Check synchronization when using rtrb::Consumer::is_abandoned() HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from minitrace-rust.