Skip to main content

balius_sdk/
logging.rs

1use tracing_subscriber::{
2    field::VisitOutput,
3    fmt::format::{DefaultVisitor, Writer},
4    layer::SubscriberExt,
5    util::SubscriberInitExt,
6    Layer, Registry,
7};
8
9#[derive(Default)]
10pub struct BaliusLayer {}
11
12impl BaliusLayer {
13    pub fn new() -> Self {
14        Self::default()
15    }
16}
17
18impl<S: tracing::Subscriber> Layer<S> for BaliusLayer {
19    fn on_event(
20        &self,
21        event: &tracing::Event<'_>,
22        _ctx: tracing_subscriber::layer::Context<'_, S>,
23    ) {
24        let context = event.metadata().target();
25        let level = match *event.metadata().level() {
26            tracing::Level::TRACE => crate::wit::balius::app::logging::Level::Trace,
27            tracing::Level::DEBUG => crate::wit::balius::app::logging::Level::Debug,
28            tracing::Level::INFO => crate::wit::balius::app::logging::Level::Info,
29            tracing::Level::WARN => crate::wit::balius::app::logging::Level::Warn,
30            tracing::Level::ERROR => crate::wit::balius::app::logging::Level::Error,
31        };
32
33        let mut message = String::new();
34        let mut visitor = DefaultVisitor::new(Writer::new(&mut message), true);
35        event.record(&mut visitor);
36        if visitor.finish().is_err() {
37            message = "[error formatting message]".to_string();
38        }
39
40        crate::wit::balius::app::logging::log(level, context, &message);
41    }
42}
43
44pub fn init() {
45    Registry::default().with(BaliusLayer::new()).init();
46}