@@ -20,7 +20,7 @@ use alloc::sync::Arc;
2020use spin:: Mutex ;
2121use tracing_core:: span:: { Attributes , Id , Record } ;
2222use tracing_core:: subscriber:: Subscriber ;
23- use tracing_core:: { Event , Metadata } ;
23+ use tracing_core:: { Event , LevelFilter , Metadata } ;
2424
2525use crate :: state:: GuestState ;
2626
@@ -31,22 +31,42 @@ pub(crate) struct GuestSubscriber {
3131 /// A reference to this state is stored in a static variable
3232 /// so it can be accessed from the guest tracing API
3333 state : Arc < Mutex < GuestState > > ,
34+ /// Maximum log level to record
35+ max_log_level : LevelFilter ,
36+ }
37+
38+ /// Converts a `tracing::log::LevelFilter` to a `tracing_core::LevelFilter`
39+ /// Used to check if an event should be recorded based on the maximum log level
40+ fn convert_level_filter ( filter : tracing:: log:: LevelFilter ) -> tracing_core:: LevelFilter {
41+ match filter {
42+ tracing:: log:: LevelFilter :: Off => tracing_core:: LevelFilter :: OFF ,
43+ tracing:: log:: LevelFilter :: Error => tracing_core:: LevelFilter :: ERROR ,
44+ tracing:: log:: LevelFilter :: Warn => tracing_core:: LevelFilter :: WARN ,
45+ tracing:: log:: LevelFilter :: Info => tracing_core:: LevelFilter :: INFO ,
46+ tracing:: log:: LevelFilter :: Debug => tracing_core:: LevelFilter :: DEBUG ,
47+ tracing:: log:: LevelFilter :: Trace => tracing_core:: LevelFilter :: TRACE ,
48+ }
3449}
3550
3651impl GuestSubscriber {
37- pub ( crate ) fn new ( guest_start_tsc : u64 ) -> Self {
52+ /// Creates a new `GuestSubscriber` with the given guest start TSC and maximum log level
53+ pub ( crate ) fn new ( guest_start_tsc : u64 , max_log_level : tracing:: log:: LevelFilter ) -> Self {
3854 Self {
3955 state : Arc :: new ( Mutex :: new ( GuestState :: new ( guest_start_tsc) ) ) ,
56+ max_log_level : convert_level_filter ( max_log_level) ,
4057 }
4158 }
59+ /// Returns a reference to the internal state of the subscriber
60+ /// This is used to access the spans and events collected by the subscriber
4261 pub ( crate ) fn state ( & self ) -> & Arc < Mutex < GuestState > > {
4362 & self . state
4463 }
4564}
4665
4766impl Subscriber for GuestSubscriber {
48- fn enabled ( & self , _md : & Metadata < ' _ > ) -> bool {
49- true
67+ fn enabled ( & self , md : & Metadata < ' _ > ) -> bool {
68+ // Check if the metadata level is less than or equal to the maximum log level filter
69+ self . max_log_level >= * md. level ( )
5070 }
5171
5272 fn new_span ( & self , attrs : & Attributes < ' _ > ) -> Id {
0 commit comments