summaryrefslogtreecommitdiff
path: root/libatrace_rust/example/src/tracing_subscriber_sample.rs
diff options
context:
space:
mode:
Diffstat (limited to 'libatrace_rust/example/src/tracing_subscriber_sample.rs')
-rw-r--r--libatrace_rust/example/src/tracing_subscriber_sample.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/libatrace_rust/example/src/tracing_subscriber_sample.rs b/libatrace_rust/example/src/tracing_subscriber_sample.rs
new file mode 100644
index 00000000..b08fcdb4
--- /dev/null
+++ b/libatrace_rust/example/src/tracing_subscriber_sample.rs
@@ -0,0 +1,60 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Usage sample for a tracing subscriber in libatrace_rust.
+
+use tracing::{debug, error, event, info, span, trace, warn, Level};
+
+use atrace_tracing_subscriber::AtraceSubscriber;
+use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
+
+#[tracing::instrument]
+fn mul_by_100_instrumented(num: i32) -> i32 {
+ let result = num * 100;
+ std::thread::sleep(std::time::Duration::from_millis(300));
+ event!(Level::INFO, num, result);
+ result
+}
+
+fn events_and_spans_demo() {
+ let power_level = 8999;
+
+ event!(Level::INFO, foo = "bar", power_level, "This is a {} message", "formattable");
+ std::thread::sleep(std::time::Duration::from_millis(100));
+
+ let span = span!(Level::TRACE, "Span name", baz = "quux");
+ std::thread::sleep(std::time::Duration::from_millis(300));
+
+ let _span_guard = span.enter();
+
+ let _entered_span = span!(Level::TRACE, "Entered span").entered();
+ std::thread::sleep(std::time::Duration::from_millis(300));
+
+ trace!("test {} log {}", "VERBOSE", mul_by_100_instrumented(42));
+ debug!("test {} log", "DEBUG");
+ info!("test {} log", "INFO");
+ warn!("test {} log", "WARNING");
+ error!("test {} log", "ERROR");
+}
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ tracing_subscriber::registry()
+ .with(AtraceSubscriber::default().with_filter())
+ .with(tracing_subscriber::fmt::layer())
+ .init();
+
+ events_and_spans_demo();
+
+ Ok(())
+}