Skip to main content

ultralytics_inference/
logging.rs

1// Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
3//! Logging utilities.
4
5use std::sync::atomic::{AtomicBool, Ordering};
6
7/// Global verbosity flag.
8static VERBOSE: AtomicBool = AtomicBool::new(true);
9
10/// Set the global verbosity flag.
11pub fn set_verbose(verbose: bool) {
12    VERBOSE.store(verbose, Ordering::Relaxed);
13}
14
15/// Check if verbose output is enabled.
16pub fn is_verbose() -> bool {
17    VERBOSE.load(Ordering::Relaxed)
18}
19
20/// Macro for standard info messages.
21#[macro_export]
22macro_rules! info {
23    ($($arg:tt)*) => {
24        println!("{}", format!($($arg)*));
25    }
26}
27
28/// Macro for warning messages.
29#[macro_export]
30macro_rules! warn {
31    ($($arg:tt)*) => {
32        use colored::Colorize;
33        eprintln!("{} {}", "WARNING ⚠️ ".yellow().bold(), format!($($arg)*));
34    }
35}
36
37/// Macro for error messages.
38#[macro_export]
39macro_rules! error {
40    ($($arg:tt)*) => {
41        use colored::Colorize;
42        eprintln!("{} {}", "ERROR 💥".red().bold(), format!($($arg)*));
43    }
44}
45
46/// Macro for success messages.
47#[macro_export]
48macro_rules! success {
49    ($($arg:tt)*) => {
50        use colored::Colorize;
51        println!("{} {}", "SUCCESS ✅".green().bold(), format!($($arg)*));
52    }
53}
54
55/// Macro for verbose messages.
56#[macro_export]
57macro_rules! verbose {
58    ($($arg:tt)*) => {
59        if $crate::logging::is_verbose() {
60            println!("{}", format!($($arg)*));
61        }
62    }
63}
64
65/// Macro for section headers.
66#[macro_export]
67macro_rules! section {
68    ($($arg:tt)*) => {
69        use colored::Colorize;
70        if $crate::logging::is_verbose() {
71            println!();
72            println!("{}", format!($($arg)*).cyan().bold());
73        }
74    }
75}
76
77#[cfg(test)]
78mod tests {
79    use super::*;
80
81    #[test]
82    fn test_verbosity_toggle() {
83        set_verbose(true);
84        assert!(is_verbose());
85
86        set_verbose(false);
87        assert!(!is_verbose());
88
89        set_verbose(true);
90        assert!(is_verbose());
91    }
92}