返回 DeepSeek-TUI-2026
logging.rs
根目录 / crates / tui / src / logging.rs
1 //! Lightweight verbose logging helpers for the CLI.
2
3 use std::sync::atomic::{AtomicBool, Ordering};
4
5 use colored::Colorize;
6
7 use crate::palette;
8 static VERBOSE: AtomicBool = AtomicBool::new(false);
9
10 /// Enable or disable verbose logging output.
11 pub fn set_verbose(enabled: bool) {
12 VERBOSE.store(enabled, Ordering::SeqCst);
13 }
14
15 /// Return true when supported env logging knobs request verbose output.
16 #[must_use]
17 pub fn env_requests_verbose_logging() -> bool {
18 std::env::var("DEEPSEEK_LOG_LEVEL")
19 .ok()
20 .is_some_and(|value| log_value_enables_verbose(&value))
21 || std::env::var("RUST_LOG")
22 .ok()
23 .is_some_and(|value| log_value_enables_verbose(&value))
24 }
25
26 fn log_value_enables_verbose(value: &str) -> bool {
27 value.split(',').any(|directive| {
28 let level = directive
29 .rsplit('=')
30 .next()
31 .unwrap_or(directive)
32 .trim()
33 .to_ascii_lowercase();
34 matches!(level.as_str(), "trace" | "debug" | "info")
35 })
36 }
37
38 /// Check whether verbose logging is enabled.
39 #[must_use]
40 pub fn is_verbose() -> bool {
41 VERBOSE.load(Ordering::SeqCst)
42 }
43
44 /// Emit a verbose info message (no-op when verbosity is disabled).
45 pub fn info(message: impl AsRef<str>) {
46 if is_verbose() {
47 let (r, g, b) = palette::DEEPSEEK_SKY_RGB;
48 eprintln!("{} {}", "info".truecolor(r, g, b).bold(), message.as_ref());
49 }
50 }
51
52 /// Emit a verbose warning message (no-op when verbosity is disabled).
53 pub fn warn(message: impl AsRef<str>) {
54 if is_verbose() {
55 let (r, g, b) = palette::DEEPSEEK_SKY_RGB;
56 eprintln!("{} {}", "warn".truecolor(r, g, b).bold(), message.as_ref());
57 }
58 }
59
60 #[cfg(test)]
61 mod tests {
62 use super::*;
63
64 #[test]
65 fn log_value_parser_accepts_common_rust_log_directives() {
66 assert!(log_value_enables_verbose("debug"));
67 assert!(log_value_enables_verbose("deepseek_cli=debug"));
68 assert!(log_value_enables_verbose("warn,deepseek_tui::client=trace"));
69 assert!(!log_value_enables_verbose("warn"));
70 assert!(!log_value_enables_verbose("deepseek_tui=off"));
71 }
72 }
73
73 lines RUST