pokeys_thread/
logging.rs

1//! Logging utilities
2
3use log::{debug, error, info, warn, Level, LevelFilter};
4use std::sync::Arc;
5
6/// Logger trait for configurable logging
7pub trait Logger: Send + Sync {
8    /// Log a message
9    fn log(&self, level: Level, target: &str, message: &str);
10
11    /// Set the log level
12    fn set_level(&mut self, level: LevelFilter);
13
14    /// Get the log level
15    fn level(&self) -> LevelFilter;
16}
17
18/// Simple logger implementation
19pub struct SimpleLogger {
20    /// Log level
21    level: LevelFilter,
22}
23
24impl SimpleLogger {
25    /// Create a new simple logger
26    pub fn new(level: LevelFilter) -> Self {
27        Self { level }
28    }
29}
30
31impl Logger for SimpleLogger {
32    fn log(&self, level: Level, target: &str, message: &str) {
33        match level {
34            Level::Error => error!(target: target, "{message}"),
35            Level::Warn => warn!(target: target, "{message}"),
36            Level::Info => info!(target: target, "{message}"),
37            Level::Debug => debug!(target: target, "{message}"),
38            Level::Trace => log::trace!(target: target, "{message}"),
39        }
40    }
41
42    fn set_level(&mut self, level: LevelFilter) {
43        self.level = level;
44    }
45
46    fn level(&self) -> LevelFilter {
47        self.level
48    }
49}
50
51/// Thread-specific logger
52pub struct ThreadLogger {
53    /// Inner logger
54    inner: Arc<dyn Logger>,
55    /// Thread ID
56    thread_id: u32,
57}
58
59impl ThreadLogger {
60    /// Create a new thread logger
61    pub fn new(thread_id: u32, inner: Arc<dyn Logger>) -> Self {
62        Self { inner, thread_id }
63    }
64
65    /// Log an error message
66    pub fn error(&self, message: &str) {
67        self.inner
68            .log(Level::Error, &format!("Thread {}", self.thread_id), message);
69    }
70
71    /// Log a warning message
72    pub fn warn(&self, message: &str) {
73        self.inner
74            .log(Level::Warn, &format!("Thread {}", self.thread_id), message);
75    }
76
77    /// Log an info message
78    pub fn info(&self, message: &str) {
79        self.inner
80            .log(Level::Info, &format!("Thread {}", self.thread_id), message);
81    }
82
83    /// Log a debug message
84    pub fn debug(&self, message: &str) {
85        self.inner
86            .log(Level::Debug, &format!("Thread {}", self.thread_id), message);
87    }
88
89    /// Log a trace message
90    pub fn trace(&self, message: &str) {
91        self.inner
92            .log(Level::Trace, &format!("Thread {}", self.thread_id), message);
93    }
94}