basic/
basic.rs

1use std::time::Duration;
2
3use clap4::{self as clap, Parser};
4use tracing::Level;
5
6use si_observability::clap4::LoggingArgs;
7
8#[derive(Debug, Parser)]
9pub struct AppArgs {
10    #[clap(flatten)]
11    logging: LoggingArgs,
12}
13
14#[tracing::instrument(level = Level::INFO)]
15pub fn do_stuff(iterations: u64) {
16    tracing::info!(iterations, "Doing stuff for {iterations} iterations.");
17    for iteration in 0..iterations {
18        tracing::debug!(iteration, "Actually getting something done!");
19        std::thread::sleep(Duration::from_millis(50));
20        do_stuff_inner();
21    }
22}
23
24#[tracing::instrument(level = Level::DEBUG)]
25pub fn do_stuff_inner() {
26    tracing::debug!("Doing some internal stuff!");
27    std::thread::sleep(Duration::from_millis(50));
28    tracing::error!("Oops! Something went wrong.");
29}
30
31pub fn main() {
32    let args = AppArgs::parse();
33
34    let _guard = si_observability::Initializer::new("APP")
35        .apply(&args.logging)
36        .init();
37
38    tracing::info!("Hello, World!");
39
40    do_stuff(5);
41}