micromegas_telemetry_sink/
local_event_sink.rs1use micromegas_tracing::{
2 event::EventSink,
3 logs::{LogBlock, LogMetadata, LogStream},
4 metrics::{MetricsBlock, MetricsStream},
5 prelude::*,
6 property_set::{Property, property_get},
7 spans::{ThreadBlock, ThreadStream},
8};
9use std::{fmt, sync::Arc};
10
11use colored::Colorize;
12
13pub struct LocalEventSink {}
15
16impl LocalEventSink {
17 pub fn new() -> Self {
18 Self {}
19 }
20}
21
22impl EventSink for LocalEventSink {
23 fn on_startup(&self, _proc_info: Arc<ProcessInfo>) {}
24 fn on_shutdown(&self) {}
25
26 fn on_log_enabled(&self, _metadata: &LogMetadata) -> bool {
27 true
29 }
30
31 fn on_log(
32 &self,
33 metadata: &LogMetadata,
34 properties: &[Property],
35 _time: i64,
36 args: fmt::Arguments<'_>,
37 ) {
38 let level_string = match metadata.level {
39 Level::Fatal => metadata.level.to_string().red().to_string(),
40 Level::Error => metadata.level.to_string().red().to_string(),
41 Level::Warn => metadata.level.to_string().yellow().to_string(),
42 Level::Info => metadata.level.to_string().cyan().to_string(),
43 Level::Debug => metadata.level.to_string().purple().to_string(),
44 Level::Trace => metadata.level.to_string().normal().to_string(),
45 };
46
47 let mut target = if !metadata.target.is_empty() {
48 metadata.target
49 } else {
50 metadata.module_path
51 };
52
53 if let Some(t) = property_get(properties, "target") {
54 target = t;
55 }
56
57 let timestamp = format!("{} ", chrono::Utc::now().to_rfc3339());
58
59 let message = format!("{timestamp}{level_string:<5} [{target}] {args}");
60
61 println!("{message}");
62 }
63
64 fn on_init_log_stream(&self, _: &LogStream) {}
65 fn on_process_log_block(&self, _: Arc<LogBlock>) {}
66
67 fn on_init_metrics_stream(&self, _: &MetricsStream) {}
68 fn on_process_metrics_block(&self, _: Arc<MetricsBlock>) {}
69
70 fn on_init_thread_stream(&self, _thread_stream: &ThreadStream) {}
71
72 #[allow(clippy::cast_precision_loss)]
73 fn on_process_thread_block(&self, _block: Arc<ThreadBlock>) {}
74
75 fn is_busy(&self) -> bool {
76 false
77 }
78}