Skip to content

Commit 58caf0d

Browse files
committed
[trace-guest] Add trace/events filtering based on max_log_level
Signed-off-by: Doru Blânzeanu <dblnz@pm.me>
1 parent e16836c commit 58caf0d

8 files changed

Lines changed: 68 additions & 63 deletions

File tree

src/hyperlight_guest_bin/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ pub extern "C" fn entrypoint(peb_address: u64, seed: u64, ops: u64, max_log_leve
236236
// It is important that all the tracing events are produced after the tracing is initialized.
237237
#[cfg(feature = "trace_guest")]
238238
if max_log_level != LevelFilter::Off {
239-
hyperlight_guest_tracing::init_guest_tracing(guest_start_tsc);
239+
hyperlight_guest_tracing::init_guest_tracing(guest_start_tsc, max_log_level);
240240
}
241241

242242
#[cfg(feature = "macros")]

src/hyperlight_guest_tracing/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ description = """Provides the tracing functionality for the hyperlight guest."""
1212
[dependencies]
1313
hyperlight-common = { workspace = true, default-features = false }
1414
spin = "0.10.0"
15-
tracing = { version = "0.1.44", default-features = false, features = ["attributes"] }
15+
tracing = { version = "0.1.44", default-features = false, features = ["attributes", "log"] }
1616
tracing-core = { version = "0.1.36", default-features = false }
1717

1818
[lints]

src/hyperlight_guest_tracing/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ mod trace {
4848
use alloc::sync::{Arc, Weak};
4949

5050
use spin::Mutex;
51+
use tracing::log::LevelFilter;
5152

5253
use crate::state::GuestState;
5354
use crate::subscriber::GuestSubscriber;
@@ -61,12 +62,12 @@ mod trace {
6162
static GUEST_STATE: spin::Once<Weak<Mutex<GuestState>>> = spin::Once::new();
6263

6364
/// Initialize the guest tracing subscriber as global default.
64-
pub fn init_guest_tracing(guest_start_tsc: u64) {
65+
pub fn init_guest_tracing(guest_start_tsc: u64, max_log_level: LevelFilter) {
6566
// Set as global default if not already set.
6667
if tracing_core::dispatcher::has_been_set() {
6768
return;
6869
}
69-
let sub = GuestSubscriber::new(guest_start_tsc);
70+
let sub = GuestSubscriber::new(guest_start_tsc, max_log_level);
7071
let state = sub.state();
7172
// Store state Weak<GuestState> to use later at runtime
7273
GUEST_STATE.call_once(|| Arc::downgrade(state));

src/hyperlight_guest_tracing/src/subscriber.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use alloc::sync::Arc;
2020
use spin::Mutex;
2121
use tracing_core::span::{Attributes, Id, Record};
2222
use tracing_core::subscriber::Subscriber;
23-
use tracing_core::{Event, Metadata};
23+
use tracing_core::{Event, LevelFilter, Metadata};
2424

2525
use 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

3651
impl 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

4766
impl 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 {

src/hyperlight_host/src/sandbox/trace/context.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl TraceContext {
137137

138138
let current_ctx = Span::current().context();
139139

140-
let span = tracing::trace_span!("call-to-guest");
140+
let span = tracing::info_span!("call-to-guest");
141141
let _ = span.set_parent(current_ctx);
142142
let entered = span.entered();
143143

@@ -380,7 +380,7 @@ impl TraceContext {
380380
}
381381

382382
pub fn new_host_trace(&mut self, ctx: Context) {
383-
let span = tracing::trace_span!("call-to-host");
383+
let span = tracing::info_span!("call-to-host");
384384
let _ = span.set_parent(ctx);
385385
let entered = span.entered();
386386
self.host_spans.push(entered);

src/tests/rust_guests/dummyguest/Cargo.lock

Lines changed: 13 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tests/rust_guests/simpleguest/Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tests/rust_guests/witguest/Cargo.lock

Lines changed: 20 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)