use std::time::Duration;
use time::macros::offset;
use tokio::time::sleep;
use tracing::info;
use tracing_rolling::{Checker, Daily};
use tracing_subscriber::fmt::writer::MakeWriterExt;
#[tokio::main]
async fn main() {
let (all, token_all) = Daily::new("logs/all.log", "[year][month][day]", offset!(+8))
.build()
.unwrap();
let (a, token_a) = Daily::new("logs/a.log", "[year][month][day]", offset!(+8))
.build()
.unwrap();
let (b, token_b) = Daily::new("logs/b.log", "[year][month][day]", offset!(+8))
.build()
.unwrap();
tracing_subscriber::fmt()
.with_ansi(false)
.with_target(false)
.with_file(true)
.with_line_number(true)
.with_writer(
all.with_filter(|e| !matches!(e.target(), "multi::a" | "multi::b"))
.and(a.with_filter(|e| e.target() == "multi::a"))
.and(b.with_filter(|e| e.target() == "multi::b")),
)
.init();
let mut count = 0;
info!("start");
while count < 100 {
count += 1;
sleep(Duration::from_millis(50)).await;
info!("{count}");
a::foo();
b::bar();
}
drop((token_a, token_all, token_b));
}
mod a {
use tracing::info;
pub fn foo() {
info!("foo");
}
}
mod b {
use tracing::info;
pub fn bar() {
info!("bar");
}
}