mistralrs_quant/utils/
log.rs1use std::{
2 hash::{DefaultHasher, Hash, Hasher},
3 sync::{LazyLock, Mutex},
4};
5
6use tracing::{info, warn};
7
8static CACHED_INFO: LazyLock<Mutex<Vec<u64>>> = LazyLock::new(|| Mutex::new(Vec::new()));
9static CACHED_WARN: LazyLock<Mutex<Vec<u64>>> = LazyLock::new(|| Mutex::new(Vec::new()));
10
11pub fn once_log_info<M: AsRef<str>>(msg: M) {
12 let msg = msg.as_ref();
13 let mut hasher = DefaultHasher::new();
14 msg.hash(&mut hasher);
15 let hash = hasher.finish();
16
17 let mut log = CACHED_INFO.lock().expect("Poisoned Lock");
18 if !log.contains(&hash) {
19 info!("{msg}");
20 log.push(hasher.finish());
21 } else {
22 log.push(hasher.finish());
23 }
24}
25
26pub fn once_log_warn<M: AsRef<str>>(msg: M) {
27 let msg = msg.as_ref();
28 let mut hasher = DefaultHasher::new();
29 msg.hash(&mut hasher);
30 let hash = hasher.finish();
31
32 let mut log = CACHED_WARN.lock().expect("Poisoned Lock");
33 if !log.contains(&hash) {
34 warn!("{msg}");
35 log.push(hasher.finish());
36 } else {
37 log.push(hasher.finish());
38 }
39}