openjd_sessions/
logging.rs1use bitflags::bitflags;
13
14bitflags! {
15 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
25 pub struct LogContent: u32 {
26 const BANNER = 1 << 0;
27 const FILE_PATH = 1 << 1;
28 const FILE_CONTENTS = 1 << 2;
29 const COMMAND_OUTPUT = 1 << 3;
30 const EXCEPTION_INFO = 1 << 4;
31 const PROCESS_CONTROL = 1 << 5;
32 const PARAMETER_INFO = 1 << 6;
33 const HOST_INFO = 1 << 7;
34 }
35}
36
37impl log::kv::ToValue for LogContent {
38 fn to_value(&self) -> log::kv::Value<'_> {
39 log::kv::Value::from(self.bits())
40 }
41}
42
43#[macro_export]
49macro_rules! session_log {
50 ($level:ident, $session_id:expr, $content:expr, $($arg:tt)+) => {
51 log::$level!(
52 target: "openjd.sessions",
53 session_id = $session_id,
54 openjd_log_content = $crate::logging::LogContent::bits(&$content),
55 openjd_timestamp_usec = $crate::logging::timestamp_usec();
56 $($arg)+
57 )
58 };
59}
60
61pub fn timestamp_usec() -> u64 {
64 std::time::SystemTime::now()
65 .duration_since(std::time::UNIX_EPOCH)
66 .unwrap_or_default()
67 .as_micros() as u64
68}
69
70pub fn log_section_banner(session_id: &str, title: &str) {
72 session_log!(info, session_id, LogContent::BANNER, "");
73 session_log!(
74 info,
75 session_id,
76 LogContent::BANNER,
77 "=============================================="
78 );
79 session_log!(info, session_id, LogContent::BANNER, "--------- {}", title);
80 session_log!(
81 info,
82 session_id,
83 LogContent::BANNER,
84 "=============================================="
85 );
86}
87
88pub fn log_subsection_banner(session_id: &str, title: &str) {
90 session_log!(
91 info,
92 session_id,
93 LogContent::BANNER,
94 "----------------------------------------------"
95 );
96 session_log!(info, session_id, LogContent::BANNER, "{}", title);
97 session_log!(
98 info,
99 session_id,
100 LogContent::BANNER,
101 "----------------------------------------------"
102 );
103}