#![cfg(feature = "tokio")] use tracing_forest::{util::*, Tag}; fn kanidm_tag(event: &Event) -> Option { let target = event.metadata().target(); let level = *event.metadata().level(); Some(match target { "security" if level == Level::ERROR => Tag::builder() .prefix(target) .suffix("critical") .icon('🔐') .build(), "admin" | "request" => Tag::builder().prefix(target).level(level).build(), _ => return None, }) } #[tokio::test] async fn test_kanidm_tag() -> Result<(), Box> { let logs = tracing_forest::capture() .set_tag(kanidm_tag) .build() .on(async { info!(target: "admin", "some info for the admin"); error!(target: "request", "the request timed out"); error!(target: "security", "the db has been breached"); info!("no tags here"); info!(target: "unrecognized", "unrecognizable tag"); }) .await; assert!(logs.len() == 5); let admin_info = logs[0].event()?; assert!(admin_info.message() == Some("some info for the admin")); assert!(admin_info.tag().unwrap().to_string() == "admin.info"); let request_error = logs[1].event()?; assert!(request_error.message() == Some("the request timed out")); assert!(request_error.tag().unwrap().to_string() == "request.error"); let security_critical = logs[2].event()?; assert!(security_critical.message() == Some("the db has been breached")); assert!(security_critical.tag().unwrap().to_string() == "security.critical"); let no_tags = logs[3].event()?; assert!(no_tags.message() == Some("no tags here")); assert!(no_tags.tag().is_none()); let unrecognized = logs[4].event()?; assert!(unrecognized.message() == Some("unrecognizable tag")); assert!(unrecognized.tag().is_none()); Ok(()) }