use bitflags::bitflags;
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LogContent: u32 {
const BANNER = 1 << 0;
const FILE_PATH = 1 << 1;
const FILE_CONTENTS = 1 << 2;
const COMMAND_OUTPUT = 1 << 3;
const EXCEPTION_INFO = 1 << 4;
const PROCESS_CONTROL = 1 << 5;
const PARAMETER_INFO = 1 << 6;
const HOST_INFO = 1 << 7;
}
}
impl log::kv::ToValue for LogContent {
fn to_value(&self) -> log::kv::Value<'_> {
log::kv::Value::from(self.bits())
}
}
#[macro_export]
macro_rules! session_log {
($level:ident, $session_id:expr, $content:expr, $($arg:tt)+) => {
log::$level!(
target: "openjd.sessions",
session_id = $session_id,
openjd_log_content = $crate::logging::LogContent::bits(&$content),
openjd_timestamp_usec = $crate::logging::timestamp_usec();
$($arg)+
)
};
}
pub fn timestamp_usec() -> u64 {
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_micros() as u64
}
pub fn log_section_banner(session_id: &str, title: &str) {
session_log!(info, session_id, LogContent::BANNER, "");
session_log!(
info,
session_id,
LogContent::BANNER,
"=============================================="
);
session_log!(info, session_id, LogContent::BANNER, "--------- {}", title);
session_log!(
info,
session_id,
LogContent::BANNER,
"=============================================="
);
}
pub fn log_subsection_banner(session_id: &str, title: &str) {
session_log!(
info,
session_id,
LogContent::BANNER,
"----------------------------------------------"
);
session_log!(info, session_id, LogContent::BANNER, "{}", title);
session_log!(
info,
session_id,
LogContent::BANNER,
"----------------------------------------------"
);
}