Skip to main content

vtcode_exec_events/
log_support.rs

1use log::Level;
2
3use super::{EventEmitter, ThreadEvent, json};
4
5/// Emits JSON serialized events to the `log` facade at the configured level.
6#[derive(Debug, Clone)]
7pub struct LogEmitter {
8    level: Level,
9}
10
11impl LogEmitter {
12    /// Creates a new [`LogEmitter`] that logs at the provided [`Level`].
13    pub fn new(level: Level) -> Self {
14        Self { level }
15    }
16}
17
18impl Default for LogEmitter {
19    fn default() -> Self {
20        Self { level: Level::Info }
21    }
22}
23
24impl EventEmitter for LogEmitter {
25    fn emit(&mut self, event: &ThreadEvent) {
26        if log::log_enabled!(self.level) {
27            match json::to_string(event) {
28                Ok(serialized) => log::log!(self.level, "{serialized}"),
29                Err(err) => log::log!(self.level, "failed to serialize vtcode exec event for logging: {err}"),
30            }
31        }
32    }
33}
34
35pub use LogEmitter as PublicLogEmitter;