HollowPS_Custom_levels/gameserver/src/logging.rs
2024-05-24 19:45:45 +03:00

61 lines
2.1 KiB
Rust

use tracing::Instrument;
#[macro_export]
macro_rules! log_error {
($e:expr) => {
if let Err(e) = $e {
tracing::error!(error.message = %format!("{}", &e), "{:?}", e);
}
};
($context:expr, $e:expr $(,)?) => {
if let Err(e) = $e {
let e = format!("{:?}", ::anyhow::anyhow!(e).context($context));
tracing::error!(error.message = %format!("{}", &e), "{:?}", e);
}
};
($ok_context:expr, $err_context:expr, $e:expr $(,)?) => {
if let Err(e) = $e {
let e = format!("{:?}", ::anyhow::anyhow!(e).context($err_context));
tracing::error!(error.message = %format!("{}", &e), "{:?}", e);
} else {
tracing::info!($ok_context);
}
};
}
pub fn init_logging() {
#[cfg(target_os = "windows")]
ansi_term::enable_ansi_support().unwrap();
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
}
pub async fn init_system_logging() {
use std::time::Duration;
use sysinfo::System;
tokio::spawn(
async {
let mut s = System::new_all();
s.refresh_all();
let num_cpus = s.cpus().len();
loop {
tokio::time::sleep(Duration::from_millis(20000)).await;
s.refresh_all();
let process = s.process(sysinfo::get_current_pid().unwrap()).unwrap();
tracing::info!(
cpu_usage = %format!("{:.2}%", process.cpu_usage() / num_cpus as f32)
);
let memory = process.memory();
let formatted = match memory {
m if m < 1024 => format!("{m} B"),
m if m < 1024 * 1024 => format!("{:.2} KB", m as f32 / 1024.0),
m if m < 1024 * 1024 * 1024 => format!("{:.2} MB", m as f32 / 1024.0 / 1024.0),
m => format!("{:.2} GB", m as f32 / 1024.0 / 1024.0 / 1024.0),
};
tracing::info!(total_memory = %format!("{formatted}"));
}
}
.instrument(tracing::info_span!("system-usage")),
);
}