try_runtime_core/common/
misc_logging.rs

1use log::{log, Level};
2use paris::formatter::colorize_string;
3
4use crate::LOG_TARGET;
5
6fn level_to_color(level: Level) -> &'static str {
7    match level {
8        Level::Info => "blue",
9        Level::Warn => "yellow",
10        Level::Error => "red",
11        _ => "white",
12    }
13}
14
15/// A BIG log that's very difficult to miss.
16pub fn basti_log(level: Level, message: &str) {
17    let color = level_to_color(level);
18    log!(
19        target: LOG_TARGET,
20        level,
21        "{}",
22        colorize_string(format!(
23            "<bold><{}>{}\n\n",
24            &color,
25            "-".repeat(message.len())
26        ))
27    );
28    log!(
29        target: LOG_TARGET,
30        level,
31        "{}",
32        colorize_string(format!("<bold><{}>{}\n\n", &color, message))
33    );
34    log!(
35        target: LOG_TARGET,
36        level,
37        "{}",
38        colorize_string(format!(
39            "<bold><{}>{}\n\n",
40            &color,
41            "-".repeat(message.len())
42        ))
43    );
44}
45
46/// Temporarily demote the log level to a specific level and restore on drop.
47pub struct LogLevelGuard(log::LevelFilter);
48impl LogLevelGuard {
49    pub fn new(new_level: log::LevelFilter) -> Self {
50        let old_level = log::max_level();
51        log::set_max_level(new_level);
52        Self(old_level)
53    }
54
55    /// Only show errors.
56    pub fn only_errors() -> Self {
57        Self::new(log::LevelFilter::Error)
58    }
59}
60
61impl Drop for LogLevelGuard {
62    fn drop(&mut self) {
63        log::set_max_level(self.0);
64    }
65}